【问题标题】:Transaction inside transaction support? (multi database) in Spring boot事务内事务支持? Spring boot 中的(多数据库)
【发布时间】:2018-01-07 16:42:33
【问题描述】:

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

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

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

【问题讨论】:

  • 如果这些方法属于同一个类,那么我建议引入2个独立的类,以便它们每个只使用一个数据源。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2011-09-20
    • 1970-01-01
    • 2020-10-28
    • 2018-11-23
    相关资源
    最近更新 更多