首页 文章

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

提问于
浏览
5

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

  • 当我声明我的JobRepository我已经指定了我的TransactionManager时,为什么我必须在我的tasklet上再次执行它?(我没有故意使用默认名称)

  • 我正在给tasklet提供与我的JobRepository相同的TrasactionManager,它管理与我在我的步骤中所做的不同的连接 . 这是否意味着我在作家或读者中进行了自己的交易管理?

  • 如果#2为真,How does Spring Batch transaction management work?中的"What If"对我来说是个问题(没有做XA)对吗?因为我的数据和工作数据有不同的连接,对吗?

1 回答

  • 3

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

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

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

相关问题