资讯专栏INFORMATION COLUMN

Spring DataSourceUtils.getConnection与DataSource.ge

LiuZh / 1954人阅读

摘要:总是从或连接池返回一个新的连接。的内部也是通过来获取连接的。在获取连接后,如果当前拥有事务上下文,则将连接绑定到事务上下文中。

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://www.ucloud.cn/yun/66256.html

相关文章

  • Failed to validate a newly established connection异

    摘要:异常配置 异常 2016-08-04T07:49:39.261362554Z 2016-08-04 15:49:39 [http-nio-9099-exec-8] (ErrorController.java:24) - Could not get JDBC Connection; nested exception is java.sql.SQLException: Failed to...

    andot 评论0 收藏0
  • 由for update引发的血案

    摘要:微信公众号后端进阶,专注后端技术分享框架分布式中间件服务治理等等。 微信公众号「后端进阶」,专注后端技术分享:Java、Golang、WEB框架、分布式中间件、服务治理等等。 老司机倾囊相授,带你一路进阶,来不及解释了快上车! 公司的某些业务用到了数据库的悲观锁 for update,但有些同事没有把 for update 放在 Spring 事务中执行,在并发场景下发生了严重的线程阻...

    roundstones 评论0 收藏0
  • SpringBoot配置web访问H2

    摘要:下面是我用到的方法使用的连接工具,具体操作方法就是按照要求配置连接,用户名和密码即可。使用进行查看,由于项目是的,所以在这里只需要修改相应配置即可,由改为即可,启动项目,然后在项目访问路径后面加上配置的就可以查看具体结果了 【前情提要】最近开始搭建博客,在本地调试的时候使用的数据库是h2,但是调试的时候需要查看数据库,本文也由此而来。 下面是我用到的方法: 使用IDEA的Databa...

    zhaochunqi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<