Нет такой вещи, как откат соединения. Возможно, вы имели в виду откат транзакции. Вы никогда не должны откатываться, если не собираетесь потерять какие-либо изменения, сделанные в базе данных в транзакции, и вы никогда не должны фиксировать, если вы не собираетесь фиксировать все изменения, сделанные в транзакции.
Сказав это, я не понимаю термина «мы сначала делаем упреждающий откат подключения, чтобы избежать исключений при подключении», и почему вы будете это делать в первую очередь. Предполагая, что вы имеете в виду вызов метода Connection.rollback()
, я бы посчитал это плохой практикой. Фактически это приведет к потере производительности, поскольку требует сетевого вызова и вынуждает базу данных отбрасывать состояние связанной транзакции (что в этом сценарии не имеет смысла, поскольку еще не было выполнено никакой работы).
Если вы намереваетесь избежать исключений, связанных с мертвым соединением, полученным из пула соединений, вы должны сконфигурировать пул, чтобы проверить, не устарело ли соединение (обычно с помощью выполнения оператора SQL теста), прежде чем возвращать соединение с приложением. После того как приложение установило соединение, оно не должно сохранять соединение после того, как оно ему больше не нужно; в идеале приложение должно возвращать соединение с пулом. Если вы обнаружите, что храните объект соединения, базовое физическое соединение недоступно для использования другими запросами, и оно может быть фактически закрыто брандмауэром, настроенным на закрытие соединений, которые были активны после определенной продолжительности.