DataSource.getConnection()总是从datasource或连接池返回一个新的连接。
通过调用 jdbcTemplate.getDataSource().getConnection()显式获取一个连接,这个连接不是方法事务上下文线程绑定的连接,所以如果开发者如果没有手工释放这连接(显式调用 Connection#close() 方法),则这个连接将永久被占用(处于 active 状态),造成连接泄漏!

Spring 提供了一个能从当前事务上下文中获取绑定的数据连接的工具类,那就是 DataSourceUtils。Spring 的 JdbcTemplate 内部也是通过 DataSourceUtils 来获取连接的。
DataSourceUtils 提供了若干获取和释放数据连接的静态方法,说明如下:
static Connection doGetConnection(DataSource dataSource):首先尝试从事务上下文中获取连接,失败后再从数据源获取连接;
static Connection getConnection(DataSource dataSource):和 doGetConnection 方法的功能一样,实际上,它内部就是调用 doGetConnection 方法获取连接的;
static void doReleaseConnection(Connection con, DataSource dataSource):释放连接,放回到连接池中;
static void releaseConnection(Connection con, DataSource dataSource):和 doReleaseConnection 方法的功能一样,实际上,它内部就是调用 doReleaseConnection 方法获取连接的;

DataSourceUtils.getConnection()它首先查看当前是否存在事务管理上下文,并尝试从事务管理上下文获取连接,如果获取失败,直接从数据源中获取连接。在获取连接后,如果当前拥有事务上下文,则将连接绑定到事务上下文中。
如果处于事务上下文中,那么开发者不需要显示关闭或者释放连接,但是如果 DataSourceUtils 在没有事务上下文的方法中使用 getConnection() 获取连接,依然会造成数据连接泄漏,这个时候就需要显示release了 !

DataSourceUtils.releaseConnection(conn,jdbcTemplate.getDataSource());

参考:http://stackoverflow.com/ques...
https://www.ibm.com/developer...

转载自:https://segmentfault.com/a/1190000007620617

Spring DataSourceUtils.getConnection与DataSource.getConnection相关推荐

  1. aws java mysql_java - AWS EC2 / MySql - spring boot无法从datasource确定jdbc url - 堆栈内存溢出...

    我有一个简单的Spring Boot应用程序,我试图在基于Amazon AMI的Amazon EC2实例上部署. 它使用MySql数据库(版本8.0.15). 我在AWS上创建了数据库,当我从本地系统 ...

  2. mysql getconnection 如何关闭连接_【MySQL】使用连接池获取Connection执行sql以及mybatis事务注意事项...

    注意: 使用DataSourceUtils.getConnection(dataSource);方式获取连接,而不是dataSource.getConnection(). dataSource.get ...

  3. Quartz-任务调度信息持久化到DB中

    文章目录 概述 操作步骤 执行脚本建立对应的表 quartz数据表解释 配置quartz.properties 示例 总结 示例源码 概述 在默认情况下,Quartz将任务调度的运行信息保存在内存中. ...

  4. springboot动态多数据源配置和使用(从数据库读取数据源配置)(三)

    上两遍已经描述了动态多数据源的原理和基础实现了,前面的数据源配置都是从application.yml中配置多数据源的,这里再拓展补充一下其他场景,如何读取数据源不从application.yml中配置 ...

  5. Quartz 数据库存储 和 内存存储

    内存存储 1,启动类开启定时任务 package com.lgs.code;import org.springframework.boot.SpringApplication; import org. ...

  6. 大数据框架调研-流处理-Spark与Flink

    实时处理(流处理) 结论 Spark和Flink的数据源最好都是Kafka等消息队列,这样才能更好的保证Exactly-Once(精准一次): 作为流处理框架,Flink是当前最优秀的实时处理框架,并 ...

  7. Java 实现用户登录项目

    Java 实现用户登录项目 需求: 在页面中要求输入用户名和密码,并显示验证码.在三项都通过验证后显示登录成功否则登录失败 分析; 在验证用户名密码之前应该先判断验证码是否通过验证,防止多次连接数据库 ...

  8. ShardingSphere分库分表核心原理精讲第十一节 分布式事务详解

    27 分布式事务:如何理解 ShardingSphere 中对分布式事务的抽象过程? 从今天开始,我们将进入一个全新模块,即ShardingSphere 分布式事务.这是一个非常重要的主题,我们将通过 ...

  9. Spring之DataSource注入

    对于不同的数据库存取需求,我们使用JDBC来解决这个问题,对于不同的数据连接来源需求,Spring则提供了DataSource注入,更换数据来源只要在Bean定义文件中修改配置,而不用修改任何一行程序 ...

最新文章

  1. 处理时间_5_计算时间列所在年的周序号
  2. 机器学习基础-岭回归-06
  3. 浅谈游戏自动寻路A*算法
  4. Android 取消返回键返回事件,返回桌面,再按一次退出程序,双击事件
  5. CorePress-v4.5网站主题 WordPress主题
  6. 1107班html大赛比赛说明 同学们需注意的事项
  7. 如何直观的看出主题模型学习结果的好坏
  8. LibLinear(SVM包)使用说明之(二)MATLAB接口
  9. 腾讯 csig 面试简述(已通过)
  10. 具体案例 快速原型模型_快速原型模型
  11. AJA电源维修DCX750sairem射频发生器维修
  12. lending club 贷款逾期分析
  13. MySQL分库分表后聚合查询_MySQL订单分库分表多维度查询
  14. 从生活角度学习c++
  15. 每日一个Linux命令之man命令
  16. 苹果 CEO 库克“喜当爹”,女子为其孕育双胞胎,索赔31.6亿分手费!
  17. PyTorch学习笔记
  18. 计算机专业、软件技术、工程等学编程的同学电脑必配环境
  19. 人物画像————圆球转动效果
  20. 页面布局常用,让子级div排排坐

热门文章

  1. 关于路由跟踪指令---traceroute
  2. 甲方提供的工程量清单,(施工方)我方与甲
  3. 解析Android JNI机制
  4. 2023年全国最新高校辅导员精选真题及答案34
  5. Linux的set命令
  6. 最好的 NMAP 扫描策略
  7. pdf合同模板创建与生成
  8. 计算机科学与技术0218,计算机科学与技术专业《数据库原理》模拟试题(B).doc
  9. 网站安全狗V3.5枸杞版正式发布
  10. java fusioncharts_FusionCharts的使用总结(java)