Spring事务管理高级应用难点剖析: 第3部分 - 编程入门网
);
Statement stmt = null;
try {
Connection conToUse = con;
…
handleWarnings(stmt);
return result;
}
catch (SQLException ex) {
JdbcUtils.closeStatement(stmt);
stmt = null;
DataSourceUtils.releaseConnection(con, getDataSource());
con = null;
throw getExceptionTranslator().translate(
"StatementCallback", getSql(action), ex);
}
finally {
JdbcUtils.closeStatement(stmt);
//② 最后根据DataSourceUtils 释放数据连接
DataSourceUtils.releaseConnection(con, getDataSource ());
}
}
Spring事务管理高级应用难点剖析: 第3部分(8)时间:2012-04-26 IBM 陈雄华在 ① 处通过 DataSourceUtils.getConnection() 获 取连接,在 ② 处通过 DataSourceUtils.releaseConnection() 释放连接。所有 JdbcTemplate 开放的数据访问方法最终都是通过 execute(StatementCallback<T> action)执行数据访问操作的,因此这个方法代表了 JdbcTemplate 数据操作的最终实现方式。 正是因为 JdbcTemplate 严谨的获取连接,释放连接的模式化流程保证了 JdbcTemplate 对数据连接泄漏问题的免疫性。所以,如有可能尽量使用 JdbcTemplate, HibernateTemplate 等这些模板进行数据访问操作,避免直接获取数据连接的操作。 使 用 TransactionAwareDataSourceProxy 如果不得已要显式获取数据连接,除了使用 DataSourceUtils 获取事务上下文绑定的连接外,还可以通过 TransactionAwareDataSourceProxy 对数据源进行代理。数据源对象被代理后就具有了事务上 下文感知的能力,通过代理数据源的 getConnection() 方法获取的连接和使用 DataSourceUtils.getConnection() 获取连接的效果是一样的。 下面是使用 TransactionAwareDataSourceProxy 对数据源进行代理的配置: 清单 11.applicationContext.xml:对数据源进行代理
对数据源进行代理后,我们就可以 通过数据源代理对象的 getConnection() 获取事务上下文中绑定的数据连接了。 因此 ,如果数据源已经进行了 TransactionAwareDataSourceProxy 的代理,而且方法存在事务上下 文,那么清单 1 的代码也不会生产连接泄漏的问题。 其它数据访问技术的等价类 理解了 Sp |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |