使用@InboundChannelAdapter 注释防止重复文件轮询

Prevent duplicate files polling using @InboundChannelAdapter annotaion

我在 java class 中使用 @InboundChannelAdapter 注释从目录中提取文件。

我们如何防止重复文件轮询?

要通过注释配置文件轮询过程,您应该这样做:

@Bean
@InboundChannelAdapter(value = "filesChannel", poller = @Poller(fixed-rate = "5000"))
public MessageSource<File> fileReadingMessageSource() {
     FileReadingMessageSource source = new FileReadingMessageSource();
     source.setDirectory(new File(INBOUND_PATH));
     source.setAutoCreateDirectory(false);
     source.setFilter(new AcceptOnceFileListFilter<>());
     return source;
}

可以使用更简单的方法实现相同的效果 Spring Integration Java DSL:

    @Bean
    public IntegrationFlow fileReadingFlow() {
        return IntegrationFlows
                .from(s -> s.file(tmpDir.getRoot()).patternFilter("*.sitest"),
                        e -> e.poller(Pollers.fixedDelay(100)))
                .transform(Transformers.fileToString())
                .aggregate(a -> a.correlationExpression("1")
                        .releaseStrategy(g -> g.size() == 25))
                .channel(MessageChannels.queue("fileReadingResultChannel"))
                .get();
    }

你的另一个问题也可以用 DSL 解决,但这绝对是单独的 SO 问题...