根据我的研究,我正在使用spring集成输出通道将文件发送到FTP服务器,我能够将一个文件从文件夹发送到ftp,我担心的是我要继续轮询一个本地文件夹,例如:BEY / finalBEY.csv,然后有一个名为“ finalBEY.csv”的文件,我想将其发送到某个FTP服务器,如果该文件夹中没有文件,我想继续观察或轮询文件夹直到找到一个文件夹,我敢肯定这是可能的,但无法找到解决方案或正确的编码,谢谢您的帮助
我使用的代码:
public IntegrationFlow ftpOutboundFlow(Branch myBranch){
return IntegrationFlows.from(OUTBOUND_CHANNEL)
.handle(Ftp.outboundAdapter(createNewFtpSessionFactory(myBranch), FileExistsMode.REPLACE)
.useTemporaryFileName(true)
.autoCreateDirectory(true)
//.remoteFileSeparator("/")
.fileNameExpression("headers['" + FileHeaders.FILENAME + "']")
//.fileNameExpression("BEY/FEFOexportBEY.csv")
.remoteDirectory(myBranch.getFolderPath()))
.get();
}
@Bean
public MessageChannel OUTBOUND_CHANNEL(){
return new PublishSubscribeChannel();
}
@MessagingGateway
public interface MyGateway {
@Gateway(requestChannel = OUTBOUND_CHANNEL)
void sendToFtp(File file);
}
在我要注册流并发送文件的控制器中。
private void addFlowftpOutbound(String name) {
branch = branchService.getById(Long.valueOf(name));
System.out.println(branch.getBranchCode());
IntegrationFlow flow = ftIntegration.ftpOutboundFlow(branch);
this.flowContext.registration(flow).id(name +"o").register();
myGateway.sendToFtp(new File("BEY/finalBEY.csv"));
}
Consol试用版输出:
当BEY文件夹中没有文件时,这是合乎逻辑的。
2018-11-27 08:32:47.793 WARN 6420 --- [nio-8081-exec-9] o.s.i.ftp.session.FtpRemoteFileTemplate : File BEY\finalBEY.csv does not exist
在将finalBEY.csv放到文件夹中之后,入站流只是读取文件夹中的新内容,如您所见,没有发送任何内容,此外,我检查了ftp服务器,没有任何内容,请注意,如果文件当我运行该应用程序时,它已经存在了,肯定会发送它,这已经过测试。
2018-11-27 08:33:17.985 INFO 6420 --- [ask-scheduler-2] f.s.s.configuration.FTIntegration : flow=stockInboundFlowFromAFT, message=incoming file: BEY\finalBEY.csv
2018-11-27 08:33:17.985 INFO 6420 --- [ask-scheduler-2] f.s.s.configuration.FTIntegration : flow=stockIntermediateStageChannel, message=rename file: BEY\finalBEY.csv
答案 0 :(得分:0)
您似乎正在自己轮询目录(并使用网关)。只需忽略final
文件不存在的文件。
您可以使用轮询的FileReadingMessageSource
来轮询目录并实现自定义FileListFilter
。
自定义过滤器应过滤掉final
文件尚不存在的文件。