我想使用 Spring 集成来开发一个应用程序来执行以下操作
- 当文件可用时,轮询目录中的文件。
- 将文件复制到存档目录
- 处理文件并将路径添加到数据库。
我不确定如何配置它,也没有找到任何好的文档。它们中的大多数都是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在他的评论中提到的示例项目做出贡献,但这已经取决于您,社区。我们在这里真的无法猜测示例中要涵盖的所有现场用例。
针对您的请求的一些解决方案可能是这样的:
fileInputChannel
必须是您现有fileWritingMessageHandler()
作为第二个订阅者的PublishSubscribeChannel
。- 您添加第一个订阅者(
@ServiceActivator
(来处理该文件,并如您所说存储在数据库中,这绝对可以作为此订阅者之后的下一个@ServiceActivator
。
请参阅与上述@ServiceActivator
一起显示@Order
注释,以确保您的订阅者按正确的顺序订阅。由于您确实要移动文件,因此在发送到该FileWritingMessageHandler
之前对其进行处理非常重要。
这个任务也可以用Java DSL来完成,甚至可能它的代码可以短得多。
说我会请你阅读从EIP书开始的文档,让自己熟悉集成的概念和原则。