下载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
文件
修改
type
为nacos
,此处是声明你使用的注册中心
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
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地址
config
的type
如果改为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
表