我打算在分布式环境中使用spring批处理。做一些批处理任务。
现在,当我的意思是分布式环境时,我的意思是我有一套带有前端网络服务的盒子。负载均衡器分配然后将作业分配到盒子。
现在我几乎没有问题:
1)如果作业被中途终止会发生什么(比如说盒子重新启动)。春天批次会自动重启作业吗?或者我是否需要编写自己的自定义观察者然后调用spring batch api来重新启动作业?
2)如果回弹有这种自动重启。可以一次挑选并执行相同的工作吗?
是这种情况吗?
答案 0 :(得分:1)
Spring Batch有四种处理可伸缩性的策略,有关详细信息,请参阅here:
您的是一个多进程场景,因此您可以在步骤远程分块和分步分配之间进行选择,具体取决于读取部分与进程/写入相比的成本。
但是在这两种情况下都不可能有两个实例重复工作,它们都是为避免这种情况而设计的。只有偶然在不同机器中部署两个单一过程机制中的一个才会发生这种情况,这会导致你提到的问题。
还可以预见重启逻辑,有关详细信息,请参见Restartability部分。
重新启动后,作业将继续读取,处理和写入下一个数据块。如果读取器/处理器/写入器被配置/写入任务被分块,它将全部开箱即用。
通常它涉及在写入部分中包括将该块中的读取项目标记为“已处理”。