seata1.3.0简单教程

下载seata

此处选用目前最新版本1.3.0
附上百度网盘地址: seata-1.3.0
提取码:w0ul
下载完成后解压

1.3.0

注:seata官方从1.0版本后不再提供sql脚本,以及nacos推送配置脚本,需要从0.9.0的版本复制
那么再附上0.9.0版本的百度网盘链接:seata-0.9.0
提取码:tri7
打开0.9.0版本中的conf文件夹
0.9.0/conf

将红色框框的四个文件复制到1.3.0/conf目录下

执行sql脚本

执行db_store.sql
在业务数据库执行db_undo_log.sql

修改file.conf文件

file.conf

mode="db"指定seata以数据库启动
将下面db的配置修改为自己的配置
注意使用mysql8.0及以上版本的需要更改:driverClassName = "com.mysql.cj.jdbc.Driver"

修改registry.conf文件

registry.conf

修改typenacos,此处是声明你使用的注册中心
application为seata启动后注册到nacos的服务名(愿意改就改,不愿意改就默认就行)
注:group默认为:SEATA_GROUP,更改DEFAULT_GROUP
或者和自己服务相同的group,否则会报错No available service

修改从0.9.0版本拉过来的nacos-conf.txt文件

nacos-conf.txt

1.0.0版本后,红框位置改为驼峰命名,请及时修改!!
service.vgroupMapping.此处为自定义名称=default需要和项目中的名称一致
如:

spring:
  cloud:
    alibaba:
      seata:
        tx-service-group: my_test_tx_group

修改完毕后执行1.3.0/conf下的nacos-config.sh命令为:sh nacos-config.sh 127.0.0.1
127.0.0.1为nacos地址,按实际情况修改即可
windows系统可以使用git-bash执行,命令同上

git-bash

将配置推送到nacos后可以在配置列表看到
nacos-config-list


启动seata

seata-1.3.0/bin目录下有两个脚本,linux一个windows一个

seata-script

大概这个鸟样就是启动成功了
seata-start

启动成功后打开nacos控制台可以在服务列表看到对应的seata服务
seata-server

注:因mysql8.0启动失败的情况下
将8.0的驱动jar包自行复制到lib/jdbc
seata-jdbc-driver

检查刚刚上文提到的driver-class-name是否配置正确


项目中

技术选型:

spring boot 2.1.8


    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.8.RELEASE
         
    

spring cloud greenwich.SR5

    
    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Greenwich.SR5
                pom
                import
            
        
    

注意版本关系
注册中心选用nacos


        
            org.springframework.cloud
            spring-cloud-starter-alibaba-nacos-discovery
            0.9.0.RELEASE
        

注:使用nacos需要引入spring boot starter web

        
            org.springframework.boot
            spring-boot-starter-web
        

下面引入seata相关
spring-cloud-alibaba-seata
这个包包含seata all 需要排除掉自己引入

        
            com.alibaba.cloud
            spring-cloud-alibaba-seata
            2.1.1.RELEASE
            
                
                    io.seata
                    seata-all
                
            
        

seata all 1.3.0

        
        
            io.seata
            seata-all
            1.3.0
        

将客户端的registry.conf复制到项目resources目录下
此处提供一下registry.conf

registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "nacos"

  nacos {
    application = "seata-server"
    serverAddr = "127.0.0.1"
    namespace = ""
    username = ""
    password = ""
  }
  eureka {
    serviceUrl = "http://localhost:8761/eureka"
    weight = "1"
  }
  redis {
    serverAddr = "localhost:6379"
    db = "0"
    password = ""
    timeout = "0"
  }
  zk {
    serverAddr = "127.0.0.1:2181"
    sessionTimeout = 6000
    connectTimeout = 2000
    username = ""
    password = ""
  }
  consul {
    serverAddr = "127.0.0.1:8500"
  }
  etcd3 {
    serverAddr = "http://localhost:2379"
  }
  sofa {
    serverAddr = "127.0.0.1:9603"
    region = "DEFAULT_ZONE"
    datacenter = "DefaultDataCenter"
    group = "SEATA_GROUP"
    addressWaitTime = "3000"
  }
  file {
    name = "file.conf"
  }
}

config {
  # file、nacos 、apollo、zk、consul、etcd3、springCloudConfig
  type = "nacos"

  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = ""
    group = "SEATA_GROUP"
    username = ""
    password = ""
  }
  consul {
    serverAddr = "127.0.0.1:8500"
  }
  apollo {
    appId = "seata-server"
    apolloMeta = "http://192.168.1.204:8801"
    namespace = "application"
  }
  zk {
    serverAddr = "127.0.0.1:2181"
    sessionTimeout = 6000
    connectTimeout = 2000
    username = ""
    password = ""
  }
  etcd3 {
    serverAddr = "http://localhost:2379"
  }
  file {
    name = "file.conf"
  }
}

type改为nacos
application和刚刚启动的seata服务名一致
serverAddr填写自己的nacos地址

registry.conf

configtype如果改为nacos则不需要再项目中引入file.conf

此处是声明配置中心,刚刚执行的nacos-config.sh目的就是将配置推送到nacos配置中心
serverAddr一样填写nacos地址

registry.conf


配置文件

配置文件添加:

spring:
  cloud:
    alibaba:
      seata:
        tx-service-group: my_test_tx_group

代理数据源
@Configuration
public class DataSourceProxyAutoConfiguration {
    /**
     * 数据源属性配置
     * {@link DataSourceProperties}
     */
    private DataSourceProperties dataSourceProperties;

    public DataSourceProxyAutoConfiguration(DataSourceProperties dataSourceProperties) {
        this.dataSourceProperties = dataSourceProperties;
    }

    /**
     * 配置数据源代理,用于事务回滚
     *
     * @return The default datasource
     * @see DataSourceProxy
     */
    @Primary
    @Bean("dataSource")
    public DataSource dataSource() {
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setJdbcUrl(dataSourceProperties.getUrl());
        dataSource.setUsername(dataSourceProperties.getUsername());
        dataSource.setPassword(dataSourceProperties.getPassword());
        dataSource.setDriverClassName(dataSourceProperties.getDriverClassName());
        return new DataSourceProxy(dataSource);
    }
}

启动类DataSourceAutoConfiguration排出
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
添加刚刚写的代理数据源类
@Import({DataSourceProxyAutoConfiguration.class})

Application.class

最后在调用链开始方法层加上@GlobalTransactional(rollbackFor = Exception.class)注解
controller


  • 可以在服务中抛个异常查看是否正常回滚
  • 也可以查看控制台是否有相关信息


    rollback

注:开启分布式事务的下游服务也需要 代理数据源 并创建undo_log

End

你可能感兴趣的:(seata1.3.0简单教程)