springcloud整合分布式事务seata
springcloud + seata 1.4.2
项目依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<exclusions>
<exclusion>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-core</artifactId>
<version>10.7.4</version>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>10.7.4</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<version>2021.1</version>
<exclusions>
<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.4.2</version>
<exclusions>
<exclusion>
<artifactId>druid</artifactId>
<groupId>com.alibaba</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-openfeign-core</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
<!-- seata序列化 -->
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-serializer-kryo</artifactId>
<version>1.4.2</version>
</dependency>
项目配置
seata.enabled=true
# 关闭seata数据源代理
seata.enable-auto-data-source-proxy=false
seata.use-jdk-proxy=false
seata.tx-service-group=rp_tx_group
seata.service.vgroup-mapping.rp_tx_group=default
seata.service.disable-global-transaction=false
seata.service.enable-degrade=false
#config seata by nacos
seata.config.type=nacos
seata.config.nacos.serverAddr=127.0.0.1:8848
seata.config.nacos.group=SEATA_GROUP
seata.config.nacos.password=nacos
seata.config.nacos.username=nacos
seata.config.nacos.namespace=bdddefe8-6a4c-4aae-8fb7-b5a248493dfd
# get seata-server by nacos
seata.registry.type=nacos
seata.registry.nacos.application=seata-server
seata.registry.nacos.group=SEATA_GROUP
seata.registry.nacos.username=nacos
seata.registry.nacos.password=nacos
seata.registry.nacos.serverAddr=127.0.0.1:8848
seata.registry.nacos.namespace=bdddefe8-6a4c-4aae-8fb7-b5a248493dfd
seata相关配置
# registry 节点中配置信息主要用于seata服务注册在哪个注册中心上
# 例我这里选择的是nacos,则seata服务配置成狗后会注册到nacos上
registry {
# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
#更改seata服务注册类型,这里我们使用nacos
type = "nacos"
nacos {
# 服务名称,可以随意定义
application = "seata-server"
# nacos服务ip
serverAddr = "127.0.0.1:8848"
# nacos分组,为空及默认DEFAULT_GROUP
group = "SEATA_GROUP"
# nacos命名空间,可为空
namespace = "bdddefe8-6a4c-4aae-8fb7-b5a248493dfd"
# nacos集群,保持默认就好
cluster = "default"
# nacos 账户
username = "nacos"
# nacos 密码
password = "nacos"
}
}
# config 节点中配置信息主要用于seata服务相关配置是从哪个注册中心中获取
config {
# file、nacos 、apollo、zk、consul、etcd3
# 更改seata服务配置信息类型为nacos
type = "nacos"
nacos {
# 与registry节点下nacos配置信息保持议一致即可
serverAddr = "127.0.0.1:8848"
namespace = "bdddefe8-6a4c-4aae-8fb7-b5a248493dfd"
group = "SEATA_GROUP"
username = "nacos"
password = "nacos"
}
}
store {
## store mode: file、db、redis
mode = "db"
## rsa decryption public key
publicKey = ""
## database store property
db {
## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc.
datasource = "druid"
## mysql/oracle/postgresql/h2/oceanbase etc.
dbType = "mysql"
driverClassName = "com.mysql.jdbc.Driver"
## if using mysql to store the data, recommend add rewriteBatchedStatements=true in jdbc connection param
url = "jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true"
user = "mysql"
password = "mysql"
minConn = 5
maxConn = 100
globalTable = "global_table"
branchTable = "branch_table"
lockTable = "lock_table"
queryLimit = 100
maxWait = 5000
}
}
使用示例
通常为实现类中,在特定方法上使用 @GlobalTransactional 注解
@Override
@GlobalTransactional
public void save(CouponCreateRequest request) {
// todo
}
若正常执行完毕且事务提交成功可以在日志中查看到,commit status Commited