我有一个场景,我认为它超出了 Spring 季批量的范围,但我想解释一下我的情况,看看是否有人有任何想法 . 我有一个像这样的批处理工作流:

  • 将平面文件加载到数据库中

  • 将消息发送到另一个系统以开始执行其工作

  • 等待其他系统完成工作(假设我可以轮询数据库表以等待状态标志变为某个值)

  • 一旦其他系统完成,然后转到我的作业中的下一步,读取一些数据库记录并写入文件

我已经考虑过这两种方法:1 . 将上述工作流分成两个 spring 批处理作业:一个用于步骤1-2,另一个用于步骤4.让其他一些进程执行数据库轮询以触发第二个作业 . 2.在一个睡眠的tasklet内部进行轮询,然后轮询并返回一个状态,指示我们是否需要再次轮询 .

选项1是可以的,但现在我失去了监控我所拥有的整体“工作”状态的能力 . 我将不得不创建自己的UOW进度监控,跟踪各个 spring 批处理作业 .

选项2为每个作业吃掉一个帖子 . 如果我有数百个可能正在等待的工作,我真的不希望每个人单独进行一次轮询并且只是为了睡觉而吃掉一个线程 .

我知道商业工作流引擎Flux具有工作流的概念,该工作流触及“等待”点,需要在外部发出信号,然后重新开始 . 这样做会很好 - 有一些外部进程(一个线程)让一组作业处于等待状态,轮询以查看是否有任何准备继续进行,并发出信号 . 然后 Spring 季批次接收并继续进行下一步工作 .

也许我可以通过失败工作并重新启动来近似某事?但后来我无法区分真正失败的工作和 Spring 季批量管理web应用程序中的正常“等待”状态 .

任何聪明的想法?有人知道有任何计划将此类功能添加到 spring 批次中吗?