Я настроил пул Tomcat JDBC в своем веб-приложении и добавил зависимость maven с версией 8.0.38, которая также является моей версией tomcat. Теперь я получаю соединение из этого пула и проверяю значение свойства autoCommit, и оно равно «true», затем я устанавливаю autoCommit этого соединения на «false». Затем я фиксирую транзакцию и закрываю это соединение. Теперь я получаю другое соединение из пула и проверяю значение свойства autoCommit, оно было «ложным». Но я ожидал, что это правда. Я также использую библиотеку пула 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 " );
Вывод приведенного выше кода
ложный con1
ложный 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 на "true" даже не работает для меня. он всегда возвращает соединение с autoCoomit false.
Итак, я хочу знать, как распространенные DBCP2 справляются с этим и как добиться этого в пуле Tomcat JDBC?