事务内事务支持? Spring 引导中的(多数据库)
Transaction inside transaction support? (multi database) in Spring boot
我有DB1、DB2。我为两个数据库配置了两个 DataSource
和两个 PlatformTransactionManager
(在同一台物理机器上)。
我有这个代码:
@Transaction("DB1")
public void A() {
B();
}
@Transaction("DB2")
public void B() {
}
当B()
有一个SqlException
时,DB1中的数据没有回滚。如何实现回滚DB1?
非常感谢。
@Transaction 注释有一个属性 rollbackFor
(例如 @Transaction(value = "DB1", rollbackFor = SqlException.class)
)可以满足您的需求。
但是,您的代码中实际上只会使用一个事务,因为 B
不是通过 Spring 代理调用的,而是通过内部调用 (this.B()
) 调用的。要在单独的事务方法中执行方法,必须通过 Spring 代理调用 - someService.B()
,而不是 this.B()
。
我有DB1、DB2。我为两个数据库配置了两个 DataSource
和两个 PlatformTransactionManager
(在同一台物理机器上)。
我有这个代码:
@Transaction("DB1")
public void A() {
B();
}
@Transaction("DB2")
public void B() {
}
当B()
有一个SqlException
时,DB1中的数据没有回滚。如何实现回滚DB1?
非常感谢。
@Transaction 注释有一个属性 rollbackFor
(例如 @Transaction(value = "DB1", rollbackFor = SqlException.class)
)可以满足您的需求。
但是,您的代码中实际上只会使用一个事务,因为 B
不是通过 Spring 代理调用的,而是通过内部调用 (this.B()
) 调用的。要在单独的事务方法中执行方法,必须通过 Spring 代理调用 - someService.B()
,而不是 this.B()
。