暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

JAVA:Springboot +Seata事务

拾荒的小海螺 2023-04-11
373

1、Seata简介


Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

文档地址:http://seata.io/zh-cn/docs/overview/what-is-seata.html


2、使用前提


基于支持本地 ACID 事务的关系型数据库。Java 应用,通过 JDBC 访问数据库。即具有InnoDB引擎的MySQL。


3、创建UNDO_LOG 表


日志回滚记录表

    CREATE TABLE `undo_log` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT,
    `branch_id` bigint(20) NOT NULL,
    `xid` varchar(100) NOT NULL,
    `context` varchar(128) NOT NULL,
    `rollback_info` longblob NOT NULL,
    `log_status` int(11) NOT NULL,
    `log_created` datetime NOT NULL,
    `log_modified` datetime NOT NULL,
    `ext` varchar(100) DEFAULT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;



    4、pom.xml添加引用

      <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
      </dependency>


      通过Maven包查看当前导入seata服务器版本

      到https://github.com/seata/seata/releases下载指定版本。



      5、Seata配置

      调整当前注册中心和配置存放的地方。

      registry.conf :注册中心配置,直接将服务配置在nacos

      file.conf:配置存放的地方。



      6、调整Seata微服务数据源使用代理

        @Configuration
        public class MySeataConfig {




        @Autowired
        DataSourceProperties dataSourceProperties;




        @Bean
        public DataSource dataSource(DataSourceProperties properties){
        HikariDataSource dataSource = properties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
        if(StringUtils.hasText(properties.getName())){
        dataSource.setPoolName(properties.getName());
        }
        return new DataSourceProxy(dataSource);
        }
        }


        将当前的注册配置和文件配置拷贝到当前项目底下。

        file.conf 的 service.vgroup_mapping 配置必须和spring.application.name一致在 org.springframework.cloud:spring-cloud-starter-alibaba-seata的org.springframework.cloud.alibaba.seata.GlobalTransactionAutoConfiguration类中,默认会使用 ${spring.application.name}-fescar-service-group作为服务名注册到 Seata Server上,如果和file.conf中的配置不一致,会提示 no available server to connect错误


        也可以通过配置 spring.cloud.alibaba.seata.tx-service-group修改后缀,但是必须和file.conf中的配置保持一致


        7、开启远程事务

        给大事务添加全局的事务管理@GlobalTransactional

        给小事务添加@Transactional


          @GlobalTransactional
          @Transactional
          @Override
          public void addStock(Long skuId, Long wareId, Integer skuNum) {}





          文章转载自拾荒的小海螺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论