使用Spring Integration

时间:2018-11-26 07:20:10

标签: spring spring-integration

根据我的研究,我正在使用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

1 个答案:

答案 0 :(得分:0)

您似乎正在自己轮询目录(并使用网关)。只需忽略final文件不存在的文件。

您可以使用轮询的FileReadingMessageSource来轮询目录并实现自定义FileListFilter

自定义过滤器应过滤掉final文件尚不存在的文件。