分布式事务

[warning] 当有一个功能需要多个数据库同时提交或回滚,那么就会需要使用到分布式事务。

分布式事务支持2中方式:

  1. 本地事务JTA(单个服务中的事务)
  2. 全局事务SEATA(不同微服务之间的事事务)

本地事务JTA

[warning] 本地事务使用的是JTA分布式事务,如果需要使用本地事务,可以在service层中,方法上增加@Transactional注解,增加注解后,即可实现事物处理。

@Transactional
public void addArticle(DataMap paramMap) {
}

[warning] wueasy-data-datasource工具包默认支持JTA分布式事务,当有多个数据库连接时,会默认开启,如果只有一个数据库连接,则默认关闭。

JTA分布式事务配置

此处配置全局事务,如果关闭,将禁用事务

wueasy :
  data:
    transaction:  #事务配置
      enabled: true #是否开启事务,true 是,false 否,默认 true,只有多个数据库连接,此配置才会生效
      timeout: 10000 #事务超时时间,单位毫秒,默认 10000

单个数据库连接配置

配置信息放在数据库连接配置中。

wueasy :
  data:
    datasource :
      demo :
        transaction: true #事务是否启用,默认多个连接自动启用,也可以设置为false关闭当前连接事务

全局事务SEATA

[warning] 全局事务使用的是seata框架,可以支持到不同微服务之前的事务管理。

seata文档请参考http://seata.io/zh-cn/index.html

seata事务配置

wueasy :
  data:
    transaction:  #事务配置
      seata: 
        enabled: true #启用状态,默认false
        applicationId:  #应用程序id,默认为txServiceGroup的配置
        txServiceGroup: my_test_tx_group #默认服务器组,默认my_test_tx_group

代码中使用

主调用服务中需要增加@Transactional@GlobalTransactional

@Transactional(rollbackFor = {Throwable.class})
    @GlobalTransactional(timeoutMills = 300000)
    public void testSeata(DataMap paramMap) {

        System.err.println("开始全局事务,XID = " + RootContext.getXID());
        Demo demo = new Demo();
        demo.setName("测试123");
        demo.setCreatedTime(new Date());

        demoMapper.insertSelective(demo);


        Result<Void> result = new Client().invoke("DEMO002", paramMap);
        if(result.getErrorNo()!=0) {
            throw new InvokeException(result.getErrorNo(),result.getErrorInfo());
        }
    }

子服务中需要增加@Transactional@GlobalLock

@Override
    @GlobalLock
    @Transactional(rollbackFor = {Throwable.class})
    public void testSeata(DataMap paramMap) {

        Demo demo = new Demo();
        demo.setName("test123");
        demo.setCreatedTime(new Date());

        demoMapper.insertSelective(demo);
        if(true) {
            throw new InvokeException(-1,"测试事务");
        }
    }
Copyright © wueasy.com 2017-2022 all right reserved,powered by Gitbook未经允许,禁止以任何形式传播 修订时间: 2021-12-01

results matching ""

    No results matching ""