交易内部交易支持? (多数据库)在Spring启动时

时间:2018-01-07 16:42:33

标签: java spring spring-boot spring-transactions multi-database

我有DB1,DB2。我为两个数据库(在同一台物理机器中)配置了两个DataSource和两个PlatformTransactionManager。 我有这段代码:

@Transaction("DB1")
public void A() {
    B();
}
@Transaction("DB2")
public void B() {
}

B()SqlException时,DB1中的数据没有回滚。如何实现回滚DB1? 非常感谢。

1 个答案:

答案 0 :(得分:0)

@Transaction注释有一个属性rollbackFor(例如@Transaction(value = "DB1", rollbackFor = SqlException.class)),可以满足您的需求。

但是,代码中实际只会使用一个事务,因为B不是通过Spring代理调用,而是通过内部调用(this.B())调用。要在单独的事务方法中执行方法,必须通过Spring代理调用 - someService.B(),而不是this.B()