1、解压seata1.5.2执行sql语句,并且在自己的业务数据库也要加上undo的表
2、修改seata的conf目录下的application.yml文件
server:
port: 7091
spring:
application:
name: seata-server
logging:
config: classpath:logback-spring.xml
file:
path: ${user.home}/logs/seata
extend:
logstash-appender:
destination: 127.0.0.1:4560
kafka-appender:
bootstrap-servers: 127.0.0.1:9092
topic: logback_to_logstash
console:
user:
username: seata
password: seata
seata:
config:
# support: nacos, consul, apollo, zk, etcd3
type: nacos
nacos:
server-addr: 127.0.0.1:8848
namespace: cbd769d5-ef57-4afa-8ecb-79112a465d09 #此处不填写,将会默认使用DEFAULT_GROUP
group: SEATA_GROUP
username: nacos #nacos的账户(请自行修改)
password: nacos #nacos的密码(请自行修改)
data-id: seataServer.yml #对应文章后边在nacos中添加的配置
registry:
# support: nacos, eureka, redis, zk, consul, etcd3, sofa
type: nacos
nacos:
application: seata-server
server-addr: 127.0.0.1:8848
group: SEATA_GROUP
namespace: cbd769d5-ef57-4afa-8ecb-79112a465d09 #此处不填写,将会默认使用DEFAULT_GROUP
cluster: default
username: nacos #nacos的账户(请自行修改)
password: nacos #nacos的密码(请自行修改)
#store:
# support: file 、 db 、 redis
# mode: file
# server:
# service-port: 8091 #If not configured, the default is '${server.port} + 1000'
security:
secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
tokenValidityInMilliseconds: 1800000
ignore:
urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login
上面配置设置了namespace,如果你的nacos没有命名空间可以不写
3、nacos增加seataServer.yml的配置
service:
vgroupMapping:
XXX-system-group: default
XXX-exp-group: default
store:
db:
datasource: druid
dbType: mysql
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://XXX:3306/ry-seata?useUnicode=true
user: XXX
password: XXX
globalTable: global_table
lockTable: lock_table
branchTable: branch_table
distributedLockTable: distributed_lock
maxConn: 30
maxWait: 5000
minConn: 5
queryLimit: 100
mode: db
XXX-exp、XXX-system需要用到seata,所以上面的对这两个服务进行了配置
4、对上面的XXX-exp、XXX-system服务在nacos配置vgroupMapping命名的配置文件
里面内容:default 格式text
然后启动seata
5、代码加入注解
在需要用到事务的入口方法上加上上面的注解
在入口方法里面调用了别的服务的方法,在那个方法加入注解如下
这里的方法注解必须是
@Transactional(propagation = Propagation.REQUIRES_NEW)
6、若依的全局异常处理会拦截掉异常,导致seata不回滚,所以对这个类进行了处理
服务降级的fallback会对这个异常进一步处理,所以需要对调用服务的fallback进行处理
到此,seata的事务就处理完毕