事务内事务支持? 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()