我有一个使用两个数据库的 Spring Batch 应用程序。一个用于作业存储库和一个包含业务数据的数据库。目前,我为这些数据源使用了两个不同的事务管理器,但我公司的一些人建议使用单个 JTA TransactionManager(带有 XA)。这真的正确吗?如果对业务数据库的事务失败,这是否意味着对作业存储库的任何更新也会回滚?这可能是不可取的。在这种情况下,最佳做法是什么?
问问题
851 次
2 回答
1
恕我直言,使用 JTA 绑定两个数据源不是一个好的选择。想象一下,如果业务事务回滚,此时如果启用了 JTA,您将无法提交 Spring Batch 事务,因此您将无法在 Spring Batch 数据库中更新您的 Batch 的当前状态。
不过,您可以尝试强制回滚业务事务并查看影响。
希望能帮助到你。
于 2016-01-06T16:58:50.973 回答
0
对于两个不同的数据源,使用 XADataSource 和 Atomikos 之类的事务管理器可能会更好。但是,根据您的输入,这两个数据源不必位于单个事务管理器下,因为作业存储库是一种状态管理策略。我可能会建议连接 2 个不同的事务管理器。在 Spring 论坛中查看此链接:2 数据源
于 2016-01-07T17:40:29.503 回答