Spring集成 - 如何在没有轮询的情况下检查目录中的文件?

时间:2015-08-06 01:14:15

标签: java spring file spring-integration dsl

在Spring集成中是否存在一种方法(使用int-file:inbound-channel-adapter或任何其他方法)来简单地检查目录中的文件(最好是模式匹配)而不进行轮询,如果文件存在,则获取它并进一步处理,如果它没有,只需退出(我可以使用路由器进行条件重定向)..我想要实现的是基于简单的一次性文件检查来控制流程而不是像文件监视器一样轮询目录。或者,我是否必须使用服务激活器在Java中执行此操作?

修改

这是我到目前为止所得到的:

@Bean
    public FileReadingMessageSource fileSource();
    CompositeFileListFilter f=new CompositeFileListFilter();
    f.addFilter(new SimplePatternFileListFilter("*.zip"));
    FileReadingMessageSource fsource = new FileReadingMessageSource();
    fsource.setDirectory(inputDir);
    fsource.setFilter(f);
    return fsource;
}

@Bean
    public IntegrationFlow loadInput(){
        return IntegrationFlows
                .from(fileSource())
//                .from(Files.inboundAdapter(inputDir)
//                                .patternFilter("*.zip"),
//                        e -> e.poller(Pollers
//                                .fixedDelay(20000)
//                                .maxMessagesPerPoll(1)))
                .handle("inputLoaderService", "extractZip")
                .handle("inputLoaderService", "readInputFile")
                .enrichHeaders(s -> s.header("Content-Type", "application/json"))
                .channel("requestChannel")
                .get();
    }

请您指导我如何正确接线?的Ta!

1 个答案:

答案 0 :(得分:1)

您可以连接FileReadingMessageSource bean并调用其receive()方法。如果没有剩余文件,则返回null。