引用:当Spring事务方法运行时,就产生一个事务上下文,该上下文在本事务执行线程中针对同一个数据源绑定了一个唯一的数据连接(或其衍 生品),所有被该事务上下文传播的方法都共享这个数据连接。这个数据连接从数据源获取及返回给数据源都在Spring掌控之中,不会发生问题。如果在需要 数据连接时,能够获取这个被Spring管控的数据连接,则使用者可以放心使用,无须关注连接释放的问题。
通过调用 jdbcTemplate.getDataSource().getConnection()显式获取一个连接,这个连接不是方法事务上下文线程绑定的连接,所以如果开发者如果没有手工释放这连接(显式调用 Connection#close() 方法),则这个连接将永久被占用(处于 active 状态),造成连接泄漏!
那么,如何获取这些被Spring管控的数据连接呢?Spring提供了两种方法:其一是使用数据资源获取工具类;其二是对数据源(或其衍生品如Hibernate SessionFactory)进行代理。
DataSourceUtils.releaseConnection(),放此ConnectionHolder保留的当前连接,使得该当前的Connection可以得到复用,对提供Jdbc操作的性能很有帮助。
相关推荐
DataSourceUtils.releaseConnection(conn); } } } ``` 在这个例子中,`DataSourceUtils.getConnection()`是获取连接的方法,`BeanHandler`则将查询结果自动映射到User对象中。当执行完毕后,记得释放数据库连接...
DataSourceUtils.releaseConnection(conn, dataSource); } } } ``` 总结起来,"jdbc驱动包"主要涉及Java的JDBC接口及其驱动程序,而C3p0和DBUtils是两个实用的数据库连接池和数据库操作工具,它们能够帮助开发者...
4. **异常处理**:如果执行过程中发生`SQLException`,则会通过`DataSourceUtils.releaseConnection()`方法关闭连接,并将异常转换为Spring的异常体系中的异常类型。 5. **资源释放**:无论是否出现异常,最终都会...
DataSourceUtils.releaseConnection(connection, dataSource); } @Override protected String getSQL() { // 根据业务需求返回SQL语句 return "SELECT * FROM users"; } @Override protected void ...
}} finally {DataSourceUtils.releaseConnection(con, getDataSource());}}在execute方法中,Spring首先从DataSource获取连接(Connection),并确保PreparedStatementCreator不为空,然后通过这个creator创建...