嗨,我有两种不同的方法,它们使用不同的数据源和事务管理器。我使用@Transactional属性和我想要的东西,如果我的第二个方法抛出异常而不是我的第一个方法进行回滚。但它不起作用,第一个方法无法回滚。我想念吗?

  @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED, transactionManager = myTransactionManager", propagation = Propagation.REQUIRED)
    public void saveTest(TblTest testEntity)  {

  mySecondDBSource.saveTest2(testEntity);(use MyTransactionManager2) //Do job

  testTableRepository.save(testEntity); (Use myTransactionManager) //throws Exception

}




//in mySecondDBSource class there is another method
      @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED, transactionManager = "MyTransactionManager2", propagation = Propagation.REQUIRED)
        public void saveTest2(TblTest2 testEntity) {

            testTableRepository2.save(testEntity);

        }

最佳答案

Spring Data提供了一种通过ChainedTransactionManager处理所谓的链接/分布式事务的方法。

请参见spring-transactional-with-a-transaction-across-multiple-data-sources

这也是medium的简单指南。

10-04 10:48