开发者社区 > 云原生 > 中间件 > 正文

请问seata xa事务 在spring框架中 如果一个方法里有多个数据库操作,应该填写哪个数据?

请问seata xa事务 在spring框架中 如果一个方法里有多个数据库操作,方法上的Transactional注解中的transactionManager 应该填写哪个数据库的管理器? @GlobalTransactional @Transactional(rollbackFor = {Exception.class},transactionManager = "XXXXManager",isolation= Isolation.READ_COMMITTED) public void test(){ ----操作A数据库 ----操作B数据库 ----操作C数据库 }

展开
收起
十一0204 2023-07-05 21:17:48 119 0
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在使用 Seata XA 分布式事务的情况下,如果一个方法里有多个数据库操作,方法上的 @Transactional 注解中的 transactionManager 属性应该填写 Seata 的事务管理器,而不是单个数据库的事务管理器。

    具体来说,如果您使用的是 Spring 框架,可以按照以下步骤进行配置:

    在 Spring 的配置文件中,配置 Seata 的事务管理器。例如:
    Copy


    在 Spring 的配置文件中,配置多个数据源和对应的事务管理器。例如:
    angelscript
    Copy













    在 Java 代码中,使用 @Transactional 注解标注需要进行分布式事务管理的方法,并将 transactionManager 属性设置为 Seata 的事务管理器。例如:
    java
    Copy
    @Service
    public class MyService {

    @Autowired
    private DataSource dataSource1;

    @Autowired
    private DataSource dataSource2;

    @Transactional(transactionManager = "seataTransactionManager")
    public void myMethod() {
    // 使用第一个数据源进行数据库操作
    ...

    // 使用第二个数据源进行数据库操作
    ...
    

    }

    }
    需要注意的是,

    2023-07-29 09:03:12
    赞同 展开评论 打赏
  • 意中人就是我呀!

    跟事务管理器无关,只看你有没有代理对应的datasource。直接用@GlobalTransactional。此回答整理自钉群“3群-Seata 开源讨论群”。

    2023-07-05 21:41:55
    赞同 展开评论 打赏

为企业提供高效、稳定、易扩展的中间件产品。

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载