3

我们有 Spring4 和 Spring Batch 3,我们的应用程序使用 CSV 文件作为输入文件。目前我们从命令行手动启动作业,使用带有参数的 CommandLineJobRunner,包括要处理的文件的名称。

只要输入文件到达受监视的目录,我就想启动一项异步处理的工作。我们怎么能做到这一点?

4

2 回答 2

3

您可以使用java.nio.file.WatchService来监视文件的目录。一旦文件出现,您就可以开始(或启动异步处理的作业)实际处理。

您也可以使用FileReadingMessageSource.WatchServiceDirectoryScannerSpring 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 似乎有点过头了。

于 2018-04-23T19:52:54.717 回答
3

我建议使用 Spring Batch 与 Spring Integration 的强大组合。例如,您可以使用FileInboundChannelAdapterfrom Spring Integration 来监视目录并在输入文件到达时立即启动 Spring Batch Job。

在 Spring Batch 的参考文档中有这个典型用例的代码示例:https ://docs.spring.io/spring-batch/4.0.x/reference/html/spring-batch-integration.html#launching -批处理作业通过消息

我希望这有帮助。

于 2018-04-23T22:12:31.637 回答