springboot整合seata

seata控制分布式事务:

一、为每个服务创建一个表

`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;

二、安装事务协调器(下载不了的可以从网上找)

下载地址https://github.com/seata/seata/releases (我这里使用的是1.3.0版本,如果访问不了这个网址可以从网上找)

三、整合:导入依赖:

<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-spring-boot-starter</artifactId>
    <version>1.3.0</version>
    <exclusions>
        <exclusion>
            <groupId>io.seata</groupId>
            <artifactId>seata-all</artifactId>
        </exclusion>
    </exclusions>
</dependency>
#解决日期序列化问题
<dependency>
    <groupId>com.esotericsoftware</groupId>
    <artifactId>kryo</artifactId>
    <version>4.0.2</version>
</dependency>
<dependency>
    <groupId>de.javakaffee</groupId>
    <artifactId>kryo-serializers</artifactId>
    <version>0.42</version>
</dependency>
<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-all</artifactId>
    <version>1.3.0</version>
</dependency>

四、解压并启动seata-server

到registry.conf中修改
springboot整合seata_第1张图片
所有用到分布式事务的微服务都要使用seata DataSourceProxy代理自己的数据源

@Configuration
public class MyseataConfig {
    @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);
    }
}

五、导入文件registry.conf和file.conf

六、在大事务上面标明@GlobalTransactional

七、yml配置文件

seata:
  application-id: gulimall-order
  tx-service-group: gulimall-order_tx_group
  service:
    vgroup-mapping:
      gulimall-order_tx_group: default
#解决日期序列化问题
  client:
    undo:
      log-serialization: kryo

总结

  注意application-id就是项目名,tx-service-group自定义即可和下面的保持一致。尤其注意日期序列化问题。

你可能感兴趣的:(spring,boot,java,后端)