我正在寻找一种使用Spring Boot管理多个事务的机制。 这是代码:
class Controller {
@Autowired
Service service;
class Service {
@ Transactional
public void execute () {
// 1. select process using Repository
// 2. Update process using Repository
// 3. select process using Repository
如果在步骤3中发生异常,则需要在步骤2中回滚更新。 到现在为止,我一直在处理一个数据库,因此上面的工作没有问题。 但是,不同的DB用于选择和更新。 (数据源不同) 对于每个数据源,都可以通过拆分来处理该函数,但是在这种情况下,对现有逻辑的修改将很大。 如上所述,有一种方法可以让Spring在执行execute的所有处理的同时管理事务?
目前正在研究是否可以通过以下方法来实现,但是如果有更聪明的方法,请告诉我。 1.使用您自己的注释(@ Transactional2)打开多个连接 2.拦截器发现存储库的save *功能已执行,切换数据源
谢谢
答案 0 :(得分:1)
在提供的示例中,您唯一需要回滚的事务是链接到update语句的事务。在这种情况下,将contentSize
方法标记为execute
就足够了,并确保您指定事务已链接到要更新的@transactional
:
datasource
由于选择而发生的任何异常都将将此事务标记为class Service {
@ Transactional("updating-datasource")
public void execute () {
// 1. select process using Repository
// 2. Update process using Repository
// 3. select process using Repository
,并且更新将被回滚。