解决seata和mybatis-plus事物不回滚问题

参考官方文档 -------- 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服务上的名字一样

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值