【问题标题】:Best practice/design pattern to control spring batch job execution/scheduling控制弹簧批处理作业执行/调度的最佳实践/设计模式
【发布时间】:2015-06-28 12:03:13
【问题描述】:
我们很少有相互依赖的工作,其中工作 2 在工作 1 完成之前无法开始,就像工作 4 在工作 3 完成之前无法开始一样。是否有任何最佳做法可以遵循这一点?所有这些作业都对文件系统或数据库进行某种轮询,因此我正在考虑使用 spring 集成来发送作业启动事件,但我的困惑是,我是否应该将它们打包在一起并拥有一个可以控制的父 spring 集成应用程序上下文作业执行与否?
接受最佳实践,因为我们可能会在项目后期再添加 3-4 个工作。此外,未来我们可能会实施某种仪表板来显示每个作业的状态以及它没有启动的原因等。
【问题讨论】:
标签:
spring-batch
spring-integration
【解决方案1】:
使用 Spring Integration 将多个作业启动网关链接起来非常简单,以便作业相互运行
...->JLG1->transformResult1->JLG2->transformResult2->...
等
作业可以在自己的配置文件中定义并导入到主流程中。
您可以使用 spring batch admin REST API 来查看作业状态等。
或者,考虑在 Spring XD 容器中部署您的作业,并通过启动第一个作业使用 XD Admin REST API 控制整个事情,并监控作业事件以确定何时应该开始下一个作业。同样,Spring Integration 可用于驱动整个作业序列。
Spring XD 还有一个 REST API(和用户界面)来检查作业状态。
更多信息请参见the XD documentation。