Подтвердить что ты не робот

Как HikariCP обрабатывает неполные транзакции JDBC?

Вчера я наткнулся на HikariCP и провел всю ночь, изучая его. Я действительно впечатлен количеством деталей и усилий, поставленных в тонкой настройке его реализации и дизайна. Прямо в точку, я не мог определить, как она на самом деле имеет дело с соединениями, которые проверяются обратно в пул с их autoCommit, установленными на false, в то время как на них не выдаются commit() и rollback(), например, из-за исключения. Это потенциально может стать источником многих серьезных транзакционных проблем для следующего реквестера, ожидающего нового соединения, но, к сожалению, получает это соединение со своим обвисшим состоянием транзакции.

В то время как у C3P0 и Tomcat JDBC-пула есть некоторые из этих так называемых Ручек для этой самой цели (через конфигурацию или перехват), я не смог найти ничего в документации или группе поддержки HikariCP. Пожалуйста, поправьте меня, если я ошибаюсь, но написание простого unit test показало мне, что пул ничего не делает по этому поводу.

Мне нужно знать, действительно ли это наблюдение правильно, и я ничего не пропустил. Кроме того, если есть какой-либо план для решения этой проблемы в HikariCP, так как это важно для меня.

Спасибо.

4b9b3361

Ответ 1

Я один из авторов HikariCP. HikariCP автоматически не выполняет фиксацию или откат, если автоматическая фиксация отключена. Обычно ожидается, что приложение, которое отключает автообъявление явно, готово должным образом обработать их (рекомендуется в блоке finally) - как в в этом примере из официальной документации JDBC.

Мы готовы добавить автоматическое "откат" поведения в HikariCP (но не автоматическое "commit" ), если соединение возвращается в пул с автоматическим фиксацией в false. Пожалуйста, откройте запрос функции, если вы желаете этого поведения.

ОБНОВЛЕНИЕ: HikariCP 1.2.2 и выше выполняют автоматический "откат" для закрытых подключений с автоматическим фиксацией, установленным на "false". Кроме того, уровень изоляции транзакции будет reset для настроенного значения по умолчанию, и, как отмечено в комментариях ниже, конечно, закройте открытые сообщения и т.д.

UPDATE: HikariCP 2.3.x и выше теперь дополнительно отслеживают состояние транзакции, когда auto-commit установлен на false, и будет обходить операцию автоматического отката, если состояние транзакции чиста.