0
点赞
收藏
分享

微信扫一扫

seata1.3.0简单教程

码农K 2021-09-19 阅读 33
日记本

下载seata

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


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


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

执行sql脚本

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

修改file.conf文件


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

修改registry.conf文件


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

修改从0.9.0版本拉过来的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执行,命令同上


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


启动seata

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


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


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


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


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


项目中

技术选型:

spring boot 2.1.8

<!--指定为spring boot项目 版本为2.1.8-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

spring cloud greenwich.SR5

    <!--引入spring cloud依赖-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR5</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

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

<!--使用nacos注册中心替换eureka-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>0.9.0.RELEASE</version>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-seata</artifactId>
            <version>2.1.1.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>io.seata</groupId>
                    <artifactId>seata-all</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

seata all 1.3.0

        <!--seata-all-->
        <dependency>
            <groupId>io.seata</groupId>
            <artifactId>seata-all</artifactId>
            <version>1.3.0</version>
        </dependency>

将客户端的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地址

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

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


配置文件

配置文件添加:

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})


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


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


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

End

举报

相关推荐

0 条评论