【发布时间】:2018-04-23 17:32:38
【问题描述】:
我们有 Spring4 和 Spring Batch 3,我们的应用程序使用 CSV 文件作为输入文件。目前我们从命令行手动启动作业,使用带有参数的 CommandLineJobRunner,包括要处理的文件的名称。
我想在输入文件到达受监控目录后立即开始异步处理作业。我们该怎么做?
【问题讨论】:
标签: spring spring-batch spring-batch-job-monitoring
我们有 Spring4 和 Spring Batch 3,我们的应用程序使用 CSV 文件作为输入文件。目前我们从命令行手动启动作业,使用带有参数的 CommandLineJobRunner,包括要处理的文件的名称。
我想在输入文件到达受监控目录后立即开始异步处理作业。我们该怎么做?
【问题讨论】:
标签: spring spring-batch spring-batch-job-monitoring
您可以使用java.nio.file.WatchService 来监视目录中的文件。
一旦文件出现,您就可以开始(或启动异步处理的作业)实际处理。
您也可以使用 Spring Integration 中的 FileReadingMessageSource.WatchServiceDirectoryScanner (https://docs.spring.io/spring-integration/reference/html/files.html#watch-service-directory-scanner)
比较发布说明 Spring Batch https://github.com/spring-projects/spring-batch/releases 在 Spring Integration https://github.com/spring-projects/spring-integration/releases 看来,Spring Integration 的发布频率更高。它还具有更多的功能和集成点。
在这种情况下,如果您只需要查看目录中的文件,那么引入 Spring Integration 似乎有点过头了。
【讨论】:
我建议使用 Spring Batch 与 Spring Integration 的强大组合。例如,您可以使用 Spring Integration 中的 FileInboundChannelAdapter 来监视目录并在输入文件到达后立即启动 Spring Batch Job。
这里的 Spring Batch 参考文档中有一个典型用例的代码示例:https://docs.spring.io/spring-batch/4.0.x/reference/html/spring-batch-integration.html#launching-batch-jobs-through-messages
我希望这会有所帮助。
【讨论】: