springcloud整合seata
1. 添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-seata</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
2. 添加Seata 配置文件
下载对应版本的seata—server客户端,上面2.1.1版本对应的seata为0.9.0,找到conf
将registry.conf和file.conf文件复制到使用了seata的项目的resource下面
项目的数据库必须有undo_log表,建表语句在db_undo_log.sql中
3.设置代理数据源(这里orm框架用的是mybatis,并且使用了通用mapper)
@Configurationpublic
class DataSourceProxyConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
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);
return sqlSessionFactoryBean.getObject();
}
}
4.数据库驱动必须得用8.0以上版本,亲测使用5.7会报mapper注入异常
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///fescar-business?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password:
5.需要注意file.conf
file.conf中的 service.vgroup_mapping
这个配置,在 Spring Cloud 中默认是${spring.application.name}-fescar-service-group
,可以通过指定application.properties
的 spring.cloud.alibaba.seata.tx-service-group
这个属性覆盖,但是必须要和 file.conf
中的一致,否则会提示 no available server to connect
cloud:
alibaba:
seata:
tx-service-group: my_test_tx_group
6.在需要控制事务的service方法上加上注解
@GlobalTransactional