从this article中我们可以了解到Spring-Batch
在某些SQL存储库中拥有作业的状态。
从this article中我们可以了解到JobRepository
的位置可以配置-可以在内存中,也可以是远程数据库。
因此,如果我们需要扩展批处理作业,是否应该运行几个不同的Spring-batch JAR
,它们都配置为使用相同的共享数据库以保持同步?
这是正确的模式/架构吗?
答案 0 :(得分:1)
是的,这是要走的路。从不同的物理节点启动同一作业时可能发生的问题是,您可以两次创建同一作业实例。在这种情况下,当重启失败的执行时,Spring Batch将不知道该选择哪个实例。共享作业存储库可以防止此类并发问题。
由于基础数据库的事务处理功能,作业存储库实现了此同步。可以将IsolationLevelForCreate
设置为激进值(默认为SERIALIZABLE
),以避免上述问题。