пул tomcat jdbc имеет другое поведение при повторном использовании соединения

Я настроил пул 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?


person Dhaval Bhoot    schedule 22.02.2018    source источник


Ответы (1)


Это известная ошибка (или, скорее, функция поскольку это не было исправлено) Tomcat JDBC.

Недостаточно установить значение defaultAutoCommit, вам также необходимо включить перехватчики, которые фактически применяют эти настройки. Это заставит значение defaultAutoCommit влиять на соединения.

<property name="jdbcInterceptors" value="ConnectionState" />
person Kayaman    schedule 22.02.2018
comment
Спасибо за помощь. Добавление перехватчика решает проблему. - person Dhaval Bhoot; 22.02.2018