这是之前项目中遇到的问题,因为太忙一直没时间总结,现在终于有时间了,记录一下这个问题

springboot 和 hibernate 产生的事务问题
由于有的同事觉得直接获取数据库连接自己写sql 更加方便 ,所以就获取的connetion 这样问题就来了
1,开始获取的连接的方式是这样

Connection connection = SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection();

但是这样获取到的连接 和 spring事务里的连接并不是同一个,这个可以通过打断点看出来,不在详述
这样就导致,事务需要回滚时,不能和spring事务一起回滚。
2, 我给改成了这种

Connection  connection = DataSourceUtils.getConnection(dataSource);//获取spring事务上下文连接
connection.setAutoCommit(false);

这样获取的连接就和spring事务里的连接是同一个了
为了能正常回滚 把自动提交设置为false
这个获取连接是一个公共方法
但是这样新的问题又出现了 ,就是当查询的时候由于不加@Transactional 注解 ,所有连接不会关闭

3,增加了关闭连接的方法,就是每次查询完就关闭连接
好,新的问题又来了,当一个事务里既有增删改 和 查的时候 ,如果先查询 再增删改,就会报错 连接已关闭
4,于是在关闭连接的方法里增加了判断

boolean actualTransactionActive = TransactionSynchronizationManager.isActualTransactionActive();if(actualTransactionActive){return;}connection.close();//手动关闭连接

意思就是 如果当前线程在spring事务里 ,就不执行关闭连接的方法 ,否则就执行手动关闭

就这样问题终于解决了 ,断断续续两天时间。

spring 事务 hibernate 原生slq 原生连接问题相关推荐

  1. 《深入理解分布式事务》第三章 Spring 事务的实现原理

    <深入理解分布式事务>第三章 Spring 事务的实现原理 文章目录 <深入理解分布式事务>第三章 Spring 事务的实现原理 一.Spring 事务原理 1.JDBC 直接 ...

  2. 7、Spring事务配置下篇

    一.事务细节-七种传播行为 1.概述 1.事务的传播行为是Spring的特性,它指的是多个事务方法之间相互调用时,事务如何在这些方法之间的传播.比如一个事务方法里面调用了另外一个事务方法,那么两个方法 ...

  3. Spring事务(Transaction)的传播(propagation)属性以及隔离(isolation)级别

    目录 1 Spring事务 1.1 定义 1.1.1 事务概念 1.1.2 事务分类 1.2 声明式事务 1.2.1 @EnableTransactionManagement工作原理 1.2.2 实现 ...

  4. 总结xml配置spring-aop声明式事务配置与hibernate报错:** isno active spring和hibernate整合,原因会话工厂去路(到spring不仅仅是bean)错误

    spring事务管理太厉害了!!可以不再自管事务开发了! spring aop声明式事务配置 问题: 困扰我近十多天的的spring事务管理终于解决了, 再也不用自己管理事务了 嗯,可以删该死的hib ...

  5. SpringMVC+Spring+Mybatis整合,使用druid连接池,声明式事务,maven配置

    一直对springmvc和mybatis挺怀念的,最近想自己再搭建下框架,然后写点什么. 暂时没有整合缓存,druid也没有做ip地址的过滤.Spring的AOP简单配置了下,也还没具体弄,不知道能不 ...

  6. 为什么Spring仍然会是云原生时代最佳平台之一?

    简介: 基于Java语言的Spring生态,还能否适应新的开发方式,比如Cloud Native.Serverless.Faas等,它还会是云原生时代的最佳平台的选择吗?本文将从5个角度来为你分析一下 ...

  7. Spring官宣,干掉原生 JVM!硬气啊!

    来源│spring.io/blog/2021/03/11/announcing-spring-native-beta Spring 团队日前发布了 Spring Native Beta 版.通过 Sp ...

  8. 为什么 Spring 仍然会是云原生时代最佳平台之一?

    大家好,我是陈立兵,花名雷卷,Java/Kotlin工程师. Alibaba RSocket Broker开发者Reactive基金会的初创成员.目前主要关注于Reactive/RSocket.Ser ...

  9. Elasticsearch学习(3) spring boot整合Elasticsearch的原生方式

    前面我们已经介绍了spring boot整合Elasticsearch的jpa方式,这种方式虽然简便,但是依旧无法解决我们较为复杂的业务,所以原生的实现方式学习能够解决这些问题,而原生的学习方式也是E ...

最新文章

  1. 英语作文题目计算机,跪求一篇英语作文 题目:论计算机的优缺点
  2. Socket异步通信——使用SocketAsyncEventArgs
  3. python画笑脸图案-如何让这些代码中的一个在窗口中绘制不同大小的笑脸?
  4. Tensorflow初学者之搭建神经网络基本流程
  5. 02 | 系统可用性:没有故障,系统就一定是稳定的吗?
  6. Matlab数理统计工具箱应用简介
  7. 公众号jdk 获取手机号_如何获取公众号推文封面图
  8. 在一个C程序中,main()函数可以放在哪?
  9. rust进水器怎么用_喷丝板钻孔速度太慢怎么办?用这款增速器,效率提高35%
  10. SARIF在应用过程中对深层次需求的实现
  11. 【Ray Tracing The Next Week 超详解】 光线追踪2-4 Perlin noise
  12. js判断手指的上滑,下滑,左滑,右滑,事件监听
  13. jQuery 学习笔记之二 (jQuery代码风格)
  14. 用php实现遍历目录
  15. asp.net 调用echarts显示图表控件随浏览器自适应解决方案
  16. 设定pic单片机端口为输入_PIC单片机入门_输入输出端口详解
  17. Norton Internet Security 序列号提取(卡饭)
  18. 12 | 腾讯云代码分析快速部署
  19. 异数OS 星星之火(一)-- 异数OS-织梦师云 用户使用手册
  20. 局部线性嵌入 (Locally linear embedding-LLE)原理总结

热门文章

  1. oracle rac 一体机,oda一体机异机rman升级11.2.0.2rac到11.2.0.4
  2. [转] PHP Security
  3. Cross-Site Scripting: DOM
  4. win7安装mysql5.7.16后,执行update语句导致mysql服务停止
  5. 切分和组合图片(二)
  6. java中ch或者的符号_java 中文标点符号判断
  7. 【毕业设计】jsp网上招标系统
  8. 5G NR Power Saving —— WUS
  9. PTA7-4 装睡 (10 分)
  10. 日立电梯与招商蛇口签订2020-2022年全国范围电梯战略采购合作