我的服务在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不会共享数据库之间的转换。
我怎么能实现这种行为?
答案 0 :(得分: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);
}