弹簧文件集成Java配置



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

  1. 当文件可用时,轮询目录中的文件。
  2. 将文件复制到存档目录
  3. 处理文件并将路径添加到数据库。

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

@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;
}

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

针对您的请求的一些解决方案可能是这样的:

  1. fileInputChannel必须是您现有fileWritingMessageHandler()作为第二个订阅者的PublishSubscribeChannel
  2. 您添加第一个订阅者(@ServiceActivator(来处理该文件,并如您所说存储在数据库中,这绝对可以作为此订阅者之后的下一个@ServiceActivator

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

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

说我会请你阅读从EIP书开始的文档,让自己熟悉集成的概念和原则。

最新更新