По различным причинам соединений в пуле может стать недействительным: сервер тайм-аут соединения, проблем в сети ...Tomcat пула соединений JDBC: testOnBorrow против testWhileIdle
Я понимаю, что пул соединений Tomcat JDBC не предоставляет гарантию о действительность подключений, которые она предоставляет приложению.
Чтобы предотвратить (фактически только снизить риск) получение недопустимого соединения из пула, решение, похоже, является конфигурацией проверки соединений. Проверка соединения означает запуск очень простого запроса в базе данных (например, SELECT 1;
в MySQL).
Пул соединений Tomcat JDBC предлагает несколько вариантов проверки соединения. Эти два, которые я нахожу более интересными, - testOnBorrow
и testWhileIdle
.
Прежде всего я думал, что testOnBorrow
- лучший вариант, поскольку он в основном проверяет соединение, прежде чем предоставлять его в приложение (с максимальной частотой, определяемой validationInterval
).
Но после второго, хотя я понял, что тестирование соединения прямо перед его использованием может повлиять на отзывчивость приложения. Таким образом, я, хотя использование testWhileIdle
может быть более эффективным, поскольку оно проверяет соединения, пока они не используются.
Независимо от того, какой вариант я выбираю, кажется, что они только снижают риск получения недействительного соединения, но этот риск все еще существует.
Итак, я спрашиваю: должен ли я использовать testOnBorrow
или testWhileIdle
или смесь обоих?
На стороне примечания, я удивлен, что validationInterval
не относится к testOnReturn
, и я действительно не получаю назначение testOnConnect
.
На самом деле запрос проверки не является обязательным. Метод isValid используется для соединения, если запрос проверки не указан. Я думаю, что это хорошая идея оставить проверку соединения до драйвера JDBC. –
О, кажется, ты прав. Просто прочитайте документацию. Будет редактировать сообщение. – UltimaWeapon