参考官方文档 -------- git地址
环境 jdk1.8
spring cloud alibaba全家桶版本为 2.1.1.RELEASE
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
nacos版本1.2.1,seata版本 0.9.0
问题重现
模拟1/0异常,让事物回滚,
这里jdbcTemplate事物成功回滚,但是在使用mybatis-plus的时候,并没有回滚
@Override
public void jdbcSave() {
this.jdbcTemplate.update("insert into orders(username) values ('张三')");
}
打入断点,uodo_log中没有数据
在异常发生的时候,因为没有回滚日志里没有数据(undo_log),故orders数据没有回滚
这个时候控制台打印,显示回滚状态为已完成
解决方案
- 导入DataSourceProxyConfig
import com.alibaba.druid.pool.DruidDataSource;
import io.seata.rm.datasource.DataSourceProxy;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public 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();
}
}
启动失败
新的问题,bean创建失败
原因:没有扫描mapper
启动类加上注解
@MapperScan(“cn.yl.order.mapper”)
启动仍是失败
pom.xml文件添加
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
<include>**/*.conf</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
<!--<include>**/*.html</include>-->
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.yml</include>
<include>**/*.conf</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
<!--<include>**/*.html</include>-->
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
解决问题
其他问题排除
- 出现
no available server to connect
nacos-config.txt文件,这里的order和pay 对应 bootstrap.yml 文件
2.检查
查看源码搜索
NettyClientChannelManager
确认这里和nacos服务上的名字一样