java - 具有多个数据源的 Spring Boot @Transactional 属性

标签 java spring spring-boot spring-data-jpa

嗨,我有两种不同的方法,它们使用不同的数据源和事务管理器。我使用 @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 的简单指南.

关于java - 具有多个数据源的 Spring Boot @Transactional 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60601494/

相关文章:

spring - 仅当设置了特定 Spring 配置文件时才运行集成测试

java - Intellij idea,无法使Maven工作

java - 使用 JAR 1.6 打包仅限 Java 1.7+ 的类

java - 无法在 junit 测试中从应用程序上下文加载 bean

java - 没有基础表的 JPA 实体

spring - Http 到 Https AWS Elasticbeanstalk

java - 在 Spring Boot 中每个数据库连接开始时运行 SQL 语句

java - 为什么我不能将 EmptyBorder 添加到自定义 JComponent?

java - 高枕无忧, float 负零

java - 尝试使用 Spring Security 自定义失败登录