【问题标题】:Spring boot rollback multi datasourceSpring Boot 回滚多数据源
【发布时间】:2018-02-21 13:13:11
【问题描述】:

我的服务在 2 个数据库中进行删除,oracle 和 postgresql。当一个存储库抛出异常时,另一个不会回滚。

例子:

public MyService { 
@Autowired private OracleRep oracleRep;
@Autowired private PostgreRep postgreRep ;

@Transactional
public void delete(Long id){

    oracleRep.delete(id);
    postgreRep.delete(id);
}
}

public OracleRepImpl { 

@Autowired private NamedParameterJdbcTemplate namedParameterJdbcTemplate ;

public void delete(Long id){
    //do delete
}
}

public PostgreRepImpl { 

@Autowired private @Qualifier("postgresql")NamedParameterJdbcTemplate namedParameterJdbcTemplate ;

public void delete(Long id){
    //do delete
}
}

我猜@Transactional 注释不共享数据库之间的事务。

我该如何实现这种行为?

【问题讨论】:

标签: spring-boot transactional


【解决方案1】:

在我构建的数据库配置上:

@Bean(name = "postgresqlTransaction")

 public DataSourceTransactionManager  postgresqlDataSourceTransactionManager(@Qualifier("postgresqlDataSource") DataSource datasource) {
    return new DataSourceTransactionManager(datasource);

}

然后我构建一个注释

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Transactional("postgresqlTransaction")
public @interface TransactionalPostgresql {
}

现在:

@TransactionalPostgresql 
@Transactional
public void delete(Long id){

    oracleRep.delete(id);
    postgreRep.delete(id);
}

【讨论】:

    猜你喜欢
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    相关资源
    最近更新 更多