我已经在我的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池中实现这一点?
答案 0 :(得分:0)
这是Tomcat JDBC的known bug(或者说它没有被修复的功能)。
设置A
的值还不够,您还需要启用interceptors,这将实际执行这些设置。这将使B
值影响连接。
defaultAutoCommit