首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Spring事务管理高级运用难点剖析III

2012-09-28 
Spring事务管理高级应用难点剖析III?在 JdbcUserService 中添加一个可异步执行 logon() 方法的 asynchrLog

Spring事务管理高级应用难点剖析III

?

在 JdbcUserService 中添加一个可异步执行 logon() 方法的 asynchrLogon() 方法,我们通过异步执行 logon() 以及让主线程睡眠的方式模拟多线程环境下的执行场景。在不同的执行点,通过 reportConn() 方法汇报数据源连接的占用情况。

使用如下的 Spring 配置文件对 JdbcUserServie 的方法进行事务增强:


清单 3.applicationContext.xml

?

保证 BasicDataSource 数据源的配置默认连接为 0,运行以上程序代码,在控制台中将输出以下的信息:


清单 4. 输出日志

?

对数据源进行代理后,我们就可以通过数据源代理对象的 getConnection() 获取事务上下文中绑定的数据连接了。

因此,如果数据源已经进行了 TransactionAwareDataSourceProxy 的代理,而且方法存在事务上下文,那么清单 1 的代码也不会生产连接泄漏的问题。

其它数据访问技术的等价类

理解了 Spring JDBC 的数据连接泄漏问题,其中的道理可以平滑地推广到其它框架中去。Spring 为每个数据访问技术框架都提供了一个获取事务上下文绑定的数据连接(或其衍生品)的工具类和数据源(或其衍生品)的代理类。

DataSourceUtils 的等价类

下表列出了不同数据访问技术对应 DataSourceUtils 的等价类:


表 3. 不同数据访问框架 DataSourceUtils 的等价类

数据访问技术框架 连接 ( 或衍生品 ) 获取工具类 Spring JDBC org.springframework.jdbc.datasource.DataSourceUtils Hibernate org.springframework.orm.hibernate3.SessionFactoryUtils iBatis org.springframework.jdbc.datasource.DataSourceUtils JPA org.springframework.orm.jpa.EntityManagerFactoryUtils JDO org.springframework.orm.jdo.PersistenceManagerFactoryUtils

?

TransactionAwareDataSourceProxy 的等价类

下表列出了不同数据访问技术框架下 TransactionAwareDataSourceProxy 的等价类:


表 4. 不同数据访问框架 TransactionAwareDataSourceProxy 的等价类

数据访问技术框架 连接 ( 或衍生品 ) 获取工具类 Spring JDBC org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy Hibernate org.springframework.orm.hibernate3.LocalSessionFactoryBean iBatis org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy JPA 无 JDO org.springframework.orm.jdo.
TransactionAwarePersistenceManagerFactoryProxy

?

小结

在本文中,我们通过剖析了解到以下的真相:

使用 Spring JDBC 时如果直接获取 Connection,可能会造成连接泄漏。为降低连接泄漏的可能,尽量使用 DataSourceUtils 获取数据连接。也可以对数据源进行代理,以便将其拥有事务上下文的感知能力; 可以将 Spring JDBC 防止连接泄漏的解决方案平滑应用到其它的数据访问技术框架中。

?

?

?

【转载自:http://www.ibm.com/developerworks/cn/java/j-lo-spring-ts3/index.html】

热点排行