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

Spring integration - how to check a directory for files, without polling?

在 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();
    }

你能指导我如何正确连接吗?塔!

您可以连接一个 FileReadingMessageSource bean 并调用它的 receive() 方法。当没有剩余文件时,它将 return null.