一、采用nacos1.3.2作为注册中心
1、官网 seata.io/zh-cn/
2、安装包地址 github.com/seata/seata…
3、示例仓库: seata-samples
4、官方1.3.0git地址 github.com/seata/seata…
二、服务端配置
1、配置数据库
服务端sql
客户端sql
2、配置file.config
删除多余配置,留下需要的配置
store {
## store mode: file、db、redis
mode = "db"
## 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"
url = "jdbc:mysql://xxx.xxx.x.xxx:3306/seata"
user = "xxx"
password = "xxx"
minConn = 5
maxConn = 30
globalTable = "global_table"
branchTable = "branch_table"
lockTable = "lock_table"
queryLimit = 100
maxWait = 5000
}
}
3、registry.conf
删除多余配置,留下需要的配置
registry {
# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
type = "nacos"
nacos {
application = "seata-server"
serverAddr = "xxx.xxx.x.xxx:8848"
group = "SEATA_GROUP"
namespace = ""
username = "nacos"
password = "nacos"
}
}
config {
# file、nacos 、apollo、zk、consul、etcd3、springCloudConfig
type = "nacos"
nacos {
serverAddr = "xxx.xxx.x.xxx:8848"
namespace = ""
group = "SEATA_GROUP"
username = "nacos"
password = "nacos"
}
}
4、设置config.txt
删除多余配置,留下需要的配置
service.vgroupMapping.my_test_tx_group=default
service.default.grouplist=xxx.xxx.x.xxx:8091
service.disableGlobalTransaction=false
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://xxx.xxx.x.xxx:3306/seata?useUnicode=true
store.db.user=xxx
store.db.password=xxx
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
在nacos文件夹,推送配置给nacos
执行sh config.sh xxxxxxxxx
具体的配置运行参数和推送的方法
5、客户端配置
1、application.yml
保留自己所需要的配置
seata:
enabled: true
application-id: service
tx-service-group: my_test_tx_group
service:
vgroup-mapping:
my_test_tx_group: default
grouplist:
default: xxx.xxx.xx.xxx:8091
disable-global-transaction: false
config:
type: nacos
nacos:
namespace:
serverAddr: xxx.xxx.xxx.xxx:8848
group: SEATA_GROUP
username: ""
password: ""
registry:
type: nacos
nacos:
application: seata-server
server-addr: xxx.xxx.x.xxx:8848
group : SEATA_GROUP
namespace:
username: "nacos"
password: "nacos"
enable-auto-data-source-proxy: false
2、配置手动代理
application.yml
mybatis:
mapperLocations: classpath:mapper/*.xml
DataSourceProxyConfig.java
@Configuration
public class DataSourceProxyConfig {
@Value("${mybatis.mapperLocations}")
private String mapperLocations;
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource druidDataSource(){
return new DruidDataSource();
}
@Bean
public DataSourceProxy dataSourceProxy(DataSource dataSource) {
return new DataSourceProxy(dataSource);
}
@Bean
public SqlSessionFactory sqlSessionFactoryBean(DataSourceProxy dataSourceProxy) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSourceProxy);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
sqlSessionFactoryBean.setTransactionFactory(new SpringManagedTransactionFactory());
return sqlSessionFactoryBean.getObject();
}
}
启动类注解修改
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
三、报错处理
undo_log needs to contain the primary key.
问题原因
重复代理
处理
禁用seata的自动代理
enable-auto-data-source-proxy: false