gpt4 book ai didi

java - 使用 Spring Integration 移动文件对象

转载 作者:行者123 更新时间:2023-11-30 02:46:30 25 4
gpt4 key购买 nike

我们正在使用 Spring 4.3.3.Release 和 Spring Integration 4.3.4.Release,它们都应该是截至本文发布时的最新版本。我们在应用程序中创建一个 File 对象,并且不需要将此文件写入磁盘。

我们想要获取 File 对象并使用 Spring Integration 将此文件移动到远程 SFTP 目录。

我对 Spring Integration 有一定的了解,并且一直在查看一些示例,但我不确定现在哪个示例最有意义。

如果我能被推荐到正确的地方,那么我将采用这些示例并看看如何将它们应用到我的代码中。

谢谢!

更新1:

这是我的新应用程序上下文 XML 文件:

<int-sftp:outbound-channel-adapter id="sftpOutbondAdapter" 
channel="ftpOutboundChannel"
remote-directory="${sftp.remote.outbound.dir}"
session-factory="sftpSessionFactory" >
<int-sftp:request-handler-advice-chain>
<int:retry-advice />
</int-sftp:request-handler-advice-chain>
</int-sftp:outbound-channel-adapter>

<int:channel id="ftpOutboundChannel"/>

“sftp.remote.outbound.dir”是 sftp 服务器上的真实目录:/home/test/tom/outbound

我的类(class)看起来像这样:

@Transactional
@Service("reportService")
public class ReportServiceImpl implements ReportService
{
@Autowired
private MessageChannel ftpOutboundChannel;

@Scheduled(cron = "${sftp.timerTaskCron}", zone = "UTC")
public void runReports() throws Exception
{
File file = new File(path to some local filename);
// yes, this file really exists

Message<File> message = MessageBuilder.withPayload(file).build();
ftpOutboundChannel.send(message);
// I presume this file is output to that local directory
}
}

这似乎编译正常,但我只是想确保移动它的机制配置正确。

我有一个非常相似的单元测试。它是事务性的,也许不应该如此?

public class SftpOutboundReceiveSample extends BaseServiceTests
{
@Autowired
private MessageChannel ftpOutboundChannel;

private String _filename = "/src/test/resources/attachment/DemoTrialFormv6_1.pdf";

@Test
public void runDemo()
{
File file = new File(_filename);
assertNotNull(file);
Message<File> message = MessageBuilder.withPayload(file).build();
ftpOutboundChannel.send(message);
}
}

这是事务性的,这是否意味着一旦我们完成测试,它就会将文件从该目录中滚出?或者说,这不是一个很好的考验吗?我只是想确保文件到达正确的位置。

最佳答案

在一般情况下,它归结为配置正确的入站和出站 channel 和适配器。大致如下

<int:channel id="fileInboundChannel"/>
<int:channel id="ftpOutboundChannel"/>

<int:bridge input-channel="fileInboundChannel" output-channel="ftpOutboundChannel"/>

<file:inbound-channel-adapter id="fileSource"
directory="/path/to/file" channel="fileInboundChannel" prevent-duplicates="true">
<int:poller fixed-rate="1000"/>
</file:inbound-channel-adapter>

<ftp:outbound-channel-adapter channel="ftpOutboundChannel"
remote-directory="/path/to/storage/" session-factory="ftpSessionFactory"/>

<bean name="sessionFactory"
class="org.springframework.integration.ftp.session.DefaultFtpSessionFactory">
<property name="host" value="localhost"/>
<property name="port" value="587"/>
<property name="username" value="username"/>
<property name="password" value="password"/>
</bean>

关于java - 使用 Spring Integration 移动文件对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40050528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com