spring批处理在作业存储库和实际任务之间使用不同的事务管理器

时间:2015-09-15 01:52:02

标签: java spring spring-batch

我正在使用Spring Batch使用2(可能更多,假设为简单2)数据库。 一个用于存储所有作业数据(所有BATCH_ *表)。另一个用于实际运行我的业务逻辑数据。 有些事情我不太明白。

  1. 当我宣布我的JobRepository我已经指定了我的TransactionManager时,为什么我必须在我的tasklet上再次执行它?(我没有故意使用默认名称)
  2. 我目前正在为tasklet提供与我的JobRepository相同的TrasactionManager,它管理与我在我的步骤中所做的不同的连接。这是否意味着我在作家或读者中进行了自己的交易管理?
  3. 如果#2为真,那么How does Spring Batch transaction management work?中的“假设”将成为我的问题(不做XA)对吗?因为我的数据和作业数据有不同的连接,对吧?

1 个答案:

答案 0 :(得分:4)

您可以为任务和作业存储库使用单独的事务管理器。见这里:http://forum.spring.io/forum/spring-projects/batch/39609-using-2-different-datasources-with-spring-batch

因此,需要指定其中两个。

话虽如此,即使你可以使用两个独立的交易经理,但这并不意味着你应该这样做。如果你没有去XA,那么想象如果业务流程成功运行会发生什么,但是工作数据没有被保存。批处理下次运行时,Spring Batch会认为作业失败,并尝试再次运行它。