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