前言:最近搭建分布式事务解决方案,由于tx-lcn此项目由于资金原因,更新停止,于是乎找了另一种解决方法,阿里的seata1.2.0,在网上找了许多配置方案均以失败告终,现在自己通过查看寥寥无几的十几篇文章,终于找到能完整搭建新版本运行起来的方案
准备工作:
搭建基于docker下nacos1.2.0容器安装 docker基于nacos-1.2.0安装
搭建基于docker下seata1.2.0容器安装 docker基于seata1.2.0安装
注意事项:原理上来说,基于seata1.2.0容器配置后,修改容器内部registry.conf以及file.conf配置文件,只是让容器加载此文件进行对注册中心的注册,以及启动时候所需加载的mysql服务,1.1.0版本后,所有关于配置文件,有原来的xx_tx配置方法变成xxTx方式,譬如
driver-class-name改为driverClassName,service-vgroup-mapping改为service.vgroupMapping等,否则会报
no registry service等错误.
搭建springboot项目里需要的pom文件,注意了使用springboot2.1.7这类2.1.x的版本是不行,启动起来就报错,seata服务有关配置也是很严格区分版本,
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/>
</parent>
<groupId>com.vincent</groupId>
<artifactId>spring_cloud_seata_order</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring_cloud_seata_order</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<nacos.version>2.2.1.RELEASE</nacos.version>
<feign.version>2.2.2.RELEASE</feign.version>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--Seata 包-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<version>2.2.1.RELEASE</version>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-all</artifactId>
</exclusion>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.22</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--openfeign 支持解析MVC注解接口-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>${feign.version}</version>
</dependency>
<!--Nacos配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<!--ORM-->
<!-- 集成mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1.tmp</version>
<exclusions>
<exclusion>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
ps:由于1.1.0配置可以不需要registry.conf以及file.conf原因在于,yml整合了registry.conf,而且file.conf配置,由于通过nacos中心,所以是根据nacos里的配置列表读取的
yml配置如下:
server:
port: 11100
spring:
application:
name: order
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.116.130:3306/order?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
username: root
password: 123456
cloud:
nacos:
discovery:
server-addr: http://192.168.116.130:8848
alibaba:
seata:
tx-service-group: order-service-group
##seata配置,相当于registry.conf
seata:
client:
support:
spring:
datasource-autoproxy: false
tx-service-group: order-service-group
service:
disable-global-transaction: false
grouplist:
default: 192.168.116.130:8091
registry:
type: nacos
nacos:
server-addr: 192.168.116.130
config:
nacos:
server-addr: 192.168.116.130
type: nacos
mybatis-plus:
# configuration:mybatis.mapper-locations=classpath:mapper/*.xml
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:/mybatis/mappers/obj/*Mapper.xml
#实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: com.vincent.spring_cloud_seata_order.entity
global-config:
# 数据库相关配置
db-config:
#主键类型 AUTO:"数据库ID自增", INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
id-type: UUID
#字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断"
field-strategy: not_empty
#驼峰下划线转换
column-underline: true
#数据库大写下划线转换
#capital-mode: true
# 逻辑删除配置
logic-delete-value: 0
logic-not-delete-value: 1
db-type: mysql
#刷新mapper 调试神器
refresh: true
management:
endpoints:
web:
exposure:
include: "*"
关于配置文件几点注意事项: 这个版本在这里,servece:grouplist一个map数组,需要key-value方式读取,所以grouplist下面
是一个key-value的读取方式,否则会报unconvert to map<String,String>异常
service:
grouplist:
default: 192.168.116.130:8091
启动之后如下
如果出现箭头所指的连接seata服务成功,注册RM成功,注册TM成功那么恭喜你,完美运行起来
如果我的文章帮到各位同志们,请你们点个赞给点鼓励