7.Closing non transactional SqlSession 导致事务失败问题

        博主在研究Spring事务源码,编写测试代码时,出现了Closing non transactional SqlSession 导致事务失败的问题,于是写下这篇文章,记录一下这个问题。

前提

        已经通过配置方式,开启了 Spring 声明式事务。配置没问题,按正常情况,如下代码将会在执行两次 insert() 插入操作后,因 RuntimeException 异常而导致回滚。

@Override
@Transactional
public void add(Integer num){
    userDao.insertB();
    userDao.insertA();
    if (num < 5) {
        throw new RuntimeException("测试异常");
    }
}

        结果却是: 事务都是正提交。然后博主在 编程式事务声明式事务 之前切换,怀疑自己配置错了,却始终都是一样的结果。完全无厘头了,因为自己配置没有任何问题,都开始怀疑 Spring 版本的问题了。
在这里插入图片描述
在这里插入图片描述
        在测试项目中,有配置多个 xml 文件,通过 <import> 的方式引入。如下图所示:各个配置文件分别对应 MVC,MyBatis,Transaction 的配置。
在这里插入图片描述
问题所在:

        在 spring-mvc.xml 中,配置 <context:component-scan base-package=“com.mvc”/> 开启配置扫描。就是在这里出了问题!!! 它会扫描 com.mvc 包下的所有注解。
在这里插入图片描述
此处我们将扫描注解配置分开来扫。

  1. spring-mvc.xml 中,修改为只扫描com.mvc.Controller 包下的注解。
  2. spring-mybatis.xml中,只扫描 service 和 dao包下的注解。

配置完成后,再次启动工程,测试发现:事务OK了。 如图↓↓↓

完美。具体原因不清楚为什么。。。正常了,就这吧,也不深研究为什么了。代码就是太深奥
在这里插入图片描述

        我的整个工程只配置了一个 <context:component-scan>,有的小伙伴可能配置了多个扫描,出现一个包被多次扫描的问题,导致冲突。也有可能出现事务失败的问题。


博主写作不易,来个关注呗

求关注、求点赞,加个关注不迷路 ヾ(◍°∇°◍)ノ゙

博主不能保证写的所有知识点都正确,但是能保证纯手敲,错误也请指出,望轻喷 Thanks♪(・ω・)ノ

  • 13
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
引用中的代码段描述了在MyBatis中获取SqlSession的方法。引用中的日志信息显示了在创建新的SqlSession时的一些详细信息,包括执行的SQL语句和参数。引用中的描述是关于在操作系统自带的数据库时可能会遇到的问题问题: "Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession"是什么意思? 回答: "Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession"意味着一个非事务性的SqlSession正在被关闭。当使用MyBatis进行数据库操作时,SqlSession是一个关键的对象,它用于执行SQL语句并管理数据库连接。在使用完SqlSession后,应该关闭它以释放资源。在这个特定的日志信息中,显示的是一个非事务性的SqlSession正在被关闭。这可能是由于某些操作没有在事务中执行导致的,或者是因为在操作系统自带的数据库时遇到了一些问题123 #### 引用[.reference_title] - *1* *2* [mybatis:Creating a new SqlSession Closing non transactional SqlSession](https://blog.csdn.net/yzh_1346983557/article/details/115099740)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *3* [解决Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlS..(22.11.20)](https://blog.csdn.net/qq_48602526/article/details/127951451)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扛麻袋的少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值