【发布时间】:2021-08-22 17:40:54
【问题描述】:
我正在研究由两个数据源组成的 Spring Batch 的可行性。 Spring Batch 元数据的 SQL 数据源和业务数据的 MongoDB 数据源(用于事务)。事务方面在这里提出了几个问题。
以下主题:Spring batch with MongoDB and transactions 和相关资源为我的问题提供了许多答案。
答案提到了使用 Spring 的JtaTransactionManager 来管理两个数据源上的分布式事务。
该技术使用 2PC 协议。如果我理解正确,这也是最强大的解决方案。 https://www.infoworld.com/article/2077963/distributed-transactions-in-spring--with-and-without-xa.html?page=2
另一方面,我找到了一些关于 Spring 的 ChainedTransactionManager 的资源。该技术使用尽力而为 1PC 协议。如果我理解正确,如果基础设施出现问题(例如网络故障),该解决方案可能会处于不一致的状态。
ChainedTransactionManager 的优点是更容易实现并提供更好的性能。我看到它已被弃用https://github.com/spring-projects/spring-data-commons/issues/2232。
在 Spring Batch 中使用 ChainedTransactionManager 有哪些具体风险?万一出错,Spring批处理元数据和Mongo中的业务数据是否不一致?
我想在重试或块跳过策略中还需要考虑一些因素?
非常感谢您的帮助。
【问题讨论】:
标签: spring-batch