我们有 Spring4 和 Spring Batch 3,我们的应用程序使用 CSV 文件作为输入文件。目前我们从命令行手动启动作业,使用带有参数的 CommandLineJobRunner,包括要处理的文件的名称。
只要输入文件到达受监视的目录,我就想启动一项异步处理的工作。我们怎么能做到这一点?
我们有 Spring4 和 Spring Batch 3,我们的应用程序使用 CSV 文件作为输入文件。目前我们从命令行手动启动作业,使用带有参数的 CommandLineJobRunner,包括要处理的文件的名称。
只要输入文件到达受监视的目录,我就想启动一项异步处理的工作。我们怎么能做到这一点?
您可以使用java.nio.file.WatchService
来监视文件的目录。一旦文件出现,您就可以开始(或启动异步处理的作业)实际处理。
您也可以使用FileReadingMessageSource.WatchServiceDirectoryScanner
Spring Integration ( 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 的强大组合。例如,您可以使用FileInboundChannelAdapter
from Spring Integration 来监视目录并在输入文件到达时立即启动 Spring Batch Job。
在 Spring Batch 的参考文档中有这个典型用例的代码示例:https ://docs.spring.io/spring-batch/4.0.x/reference/html/spring-batch-integration.html#launching -批处理作业通过消息
我希望这有帮助。