春季文件集成Java配置

时间:2020-01-24 07:15:52

标签: spring-integration spring-integration-dsl

我想使用Spring集成来开发应用程序以进行以下操作

  1. 在目录中轮询文件(如果可用)。
  2. 将文件复制到存档目录
  3. 处理文件并将路径添加到数据库。

我不确定如何配置它,我找不到任何好的文档。他们大多数是在xml中的配置,我想要java config。 我有这段代码,但这只是复制文件并删除源。我不知道如何处理来源。

 @Bean
    public MessageChannel fileInputChannel() {
        return new DirectChannel();
    }
    @Bean
    @InboundChannelAdapter(value = "fileInputChannel", poller = @Poller(fixedDelay = "1000"))
    public MessageSource<File> fileReadingMessageSource() {
        FileReadingMessageSource source = new FileReadingMessageSource();
        source.setDirectory(new File(INBOUND_PATH));
        source.setFilter(new SimplePatternFileListFilter("*.pdf"));

        source.setLoggingEnabled(true);
        return source;
    }


    @Bean
    @ServiceActivator(inputChannel = "fileInputChannel")
    public FileWritingMessageHandler fileWritingMessageHandler() {


        FileWritingMessageHandler fileWritingMessageHandler = new FileWritingMessageHandler(
                new File(OUTBOUND_PATH));
        fileWritingMessageHandler.setAutoCreateDirectory(true);
        fileWritingMessageHandler.setExpectReply(false);
        fileWritingMessageHandler.setDeleteSourceFiles(true);
        return fileWritingMessageHandler;
    }

1 个答案:

答案 0 :(得分:2)

您有一个特定的业务需求,即使我们有Java示例,也并不意味着您的用例将在此处涉及。我们完全愿意为Oleg在他的评论中提到的示例项目做出贡献,但是社区,这已经由您决定。我们在这里真的无法猜测示例中要涵盖的所有现场用例。

您的请求的某些解决方案可能是这样的:

  1. fileInputChannel必须是PublishSubscribeChannel,而您现有的fileWritingMessageHandler() second 订阅者。
  2. 您添加了第一个订阅者(@ServiceActivator)来处理该文件,并按照您所说的将其存储在DB中,这肯定是该文件之后的下一个@ServiceActivator

请参阅@Order注释和提到的@ServiceActivator,以确保按照正确的顺序订阅您的订阅者。由于您确实要移动文件,因此在发送到该FileWritingMessageHandler之前对其进行处理非常重要。

此任务也可以使用Java DSL来完成,甚至它的代码可能要短得多。

说我想请您阅读以EIP Book开头的文档,以使自己熟悉集成的概念和原则。