Spring DatasourceTransactionManager在提交/回滚后不释放连接

时间:2014-08-04 18:55:29

标签: spring oracle jdbc transactions spring-jdbc

我在此配置环境中部署了企业应用程序(ear):

Weblogic 12c(12.1.1)+ Oracle RAC 11g(第2版)。 Web Module是一个MVC应用程序,使用Struts 2和Spring-framework(3.2.2)实现核心服务。 Spring JDBC用于数据库访问,单个语句使用简单的JdbcTemplate,复杂的语句使用DatasourceTransactionManager。当我启用Weblogic jdbc日志时,我注意到一个奇怪的行为。当我启动一个新事务时,我可以看到有关事务创建的jdbc信息日志,从weblogic数据源池中恢复jdbc连接以及通过连接本身将autocommit属性设置为false值。但我无法看到事务释放连接日志,并在提交/回滚调用后将autocommit标志恢复为true值。 Spring Transaction Manager可能不会释放jdbc连接,也不会恢复" autocommit"值标志(为真)?过了一会儿,我可以在我的应用程序中看到db表上的一些持久锁,导致我的应用程序的整体缺陷,并且我不会依赖于事务管理器的行为。 有没有人注意到类似的行为? 是否有可能框架不释放jdbc连接,它可以在多个事务中竞争(如jdbc日志中所示)?

由于

1 个答案:

答案 0 :(得分:0)

由于您使用的是WebLogic(JNDI?)中的托管DataSource,因此您还必须使用托管TransactionManager

<tx:jta-transaction-manager/>

应该足够了:

if (weblogicPresent) {
    return WEBLOGIC_JTA_TRANSACTION_MANAGER_CLASS_NAME;
}

而不是DatasourceTransactionManager