Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring batch 如何创建跨多个系统协调外部工作的spring批处理作业?_Spring Batch - Fatal编程技术网

Spring batch 如何创建跨多个系统协调外部工作的spring批处理作业?

Spring batch 如何创建跨多个系统协调外部工作的spring批处理作业?,spring-batch,Spring Batch,我有一个我认为不在SpringBatch范围内的场景,但我想解释一下我的情况,看看是否有人有任何想法。我有这样的批处理工作流: 将平面文件加载到数据库中 将消息发送到另一个系统以开始其工作 等待其他系统完成工作(假设我可以轮询数据库表,等待状态标志变为特定值) 一旦其他系统完成,然后转到我工作中的下一步,即读取一些数据库记录并写入文件 我想到了这两种方法: 1.将上述工作流拆分为两个spring批处理作业:一个用于步骤1-2,另一个用于步骤4。让其他进程执行数据库轮询以触发第二个作业。 2.在休

我有一个我认为不在SpringBatch范围内的场景,但我想解释一下我的情况,看看是否有人有任何想法。我有这样的批处理工作流:

  • 将平面文件加载到数据库中
  • 将消息发送到另一个系统以开始其工作
  • 等待其他系统完成工作(假设我可以轮询数据库表,等待状态标志变为特定值)
  • 一旦其他系统完成,然后转到我工作中的下一步,即读取一些数据库记录并写入文件
  • 我想到了这两种方法: 1.将上述工作流拆分为两个spring批处理作业:一个用于步骤1-2,另一个用于步骤4。让其他进程执行数据库轮询以触发第二个作业。 2.在休眠的tasklet中进行轮询,然后轮询并返回一个状态,指示是否需要再次轮询

    选项1是可以的,只是现在我失去了监控我拥有的整个“工作”状态的能力。我必须创建自己的UOW进度监控,跟踪单个spring批处理作业

    选项2为每个作业消耗一个线程。如果我有成百上千的工作可能同时在等待,我真的不希望每个人都单独投票,吃一根线只是为了睡觉

    我知道商业工作流引擎Flux有一个工作流的概念,它会到达一个“等待”点,需要从外部发出信号,然后恢复。这将很好地工作——有某种外部进程(一个线程),它将作业集置于等待状态,轮询以查看是否有作业准备好继续,并向已准备好的作业发送信号。然后,spring批处理开始并继续执行作业的下一步

    也许我可以通过作业失败并重新启动来近似一些东西?但是,我无法区分真正失败的作业和spring batch admin web应用程序中正常的“等待”状态之间的区别


    有什么好主意吗?有人知道有没有计划在spring batch中添加此类功能?

    为什么要进行所有的轮询?为什么不改为使用消息通知呢?在这种情况下,我无法更改外部系统,并且在更改完成后,它会将记录写入数据库。但是,假设我可以使用消息——有没有一种方法可以完成作业中的一个步骤“等待”直到消息到达然后继续——或者我必须使用两个作业?(像选项2)是的。这就是分区步骤的工作原理。他们等待所有的奴隶完成,然后继续前进。我们支持通过消息或轮询作业存储库进行分区,但消息显然是更好的选择。