多个 Spring 批处理作业的 JobRepository

JobRepository for several Spring Batch jobs

上下文

我们正在努力建立关于如何在具有不同商业利益的大型 IT 服务中使用 Spring 批处理的标准。

我们可能会有几批属于不同的业务领域。我们已经知道,其中一些必须从所有批次通用的 table 中获取一些参数(即 Java 和 COBOL;例如日期参数)。

体积

我们将实施的 Spring 批处理作业的数量很难评估。没有重写现有 COBOL 批处理的目标,并且尽可能鼓励连续流处理。

一些关于概念验证的问题时有出现,但目前还没有什么定论。

我们也已经有了一些幂等批处理,但那些使用基于映射的 JobRepositories。然而,所有批次都是幂等的世界是一个幻想。

问题

我们有一个问题,但我找不到相关的文档或建议如下。

在这种情况下,JobRepositories 的最佳方法是什么?是将它们全部存储到一个中央数据库中更好,还是每个 JAR 或业务单元都应该有自己的数据库?

附录

个人想法

我认为将批处理元数据与参数放在同一位置似乎是合乎逻辑的。我不认为我们可以将 tables 添加到参数 table 所在的模式中,但我们可能可以在我们创建 Spring 批处理元数据模型的模式中查看它.

真正的问题是要知道是为所有元数据存储更好还是单独存储元数据更好。

求官方推荐

我在 Spring Batch 的文档中没有找到任何关于此的建议,但如果您能在官方建议中包含 link,我将不胜感激。如果不可能,任何开明的建议都是好的。

没有 "best" 方法,您需要根据您的要求量身定制

pro central jobrepository

  • IT 部门的中心化
  • 一个调度程序(-系统来操作作业)
    • 论据薄弱,更像是"central"文化的指标
  • 运行 作业的一个基础设施(例如应用程序服务器集群)
  • 中央数据库停机(例如维护)没有问题

contra central jobrepository

  • 你的 IT 部门没有集中制
  • 把上面所有的都拿回来:-)
  • 业务数据与作业存储库不在同一个数据库中(例如 DB2 和 Oracle)
    • 提前出现停机问题...

我同意 Michael 的所有项目并添加一个...分布式事务。虽然 Spring Batch 尽其所能,但如果您正在访问多个数据库,则要么需要使用分布式事务,要么 运行 存在数据丢失的风险。