tomcat jdbc池有一些关于连接重用的不同行为

时间:2018-02-22 07:17:07

标签: java tomcat8 apache-commons-dbcp tomcat-jdbc

我已经在我的Web应用程序中配置了Tomcat JDBC池,并添加了版本8.0.38的maven依赖项,这也是我的tomcat版本。现在我从该池获得连接并检查autoCommit属性的值,它是" true"然后我将该连接的autoCommit设置为" false"。然后我提交事务,然后关闭该连接。现在我从池中获得另一个连接并检查autoCommit属性的值,它是" false"。但我期待它是真的。我也使用Apache Common DBCP2池库,而且没有这种行为。每当我从公共DBCP2池获得连接时,它返回与autoCommit设置为" true"的连接。我已经测试并看到了tomcat jdbc池的这种行为。

Connection con1 = basicDataSourceWrite.getConnection();
con1.setAutoCommit(false);
System.out.println(con1.getAutoCommit()+ " con1  " );
con1.commit();
con1.close();

Connection con2 = basicDataSourceWrite.getConnection();
System.out.println(con2.getAutoCommit()+ " con2  " );

上述代码的输出是

  

false con1
  false con2

<bean id="basicDataSourceWrite" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="${mysqlEndpointWrite}" />
    <property name="username" value="${mysqlUserWrite}" />
    <property name="password" value="${mysqlPasswordWrite}" />
    <property name="defaultAutoCommit" value="true" />
    <property name="initialSize" value="4" />
    <property name="maxActive" value="5" />
</bean>

这里将defaultAutoCommit设置为&#34; true&#34;甚至不适合我。它总是返回与autoCoomit false的连接。

所以我想知道DBCP2如何管理这个以及如何在tomcat JDBC池中实现这一点?

1 个答案:

答案 0 :(得分:0)

这是Tomcat JDBC的known bug(或者说它没有被修复的功能)。

设置A的值还不够,您还需要启用interceptors,这将实际执行这些设置。这将使B值影响连接。

defaultAutoCommit