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

В чем разница между autoReconnect & autoReconnectForPools в разъеме MySql/J?

В базовой конфигурации для MySql разъем J драйвера, А риск покупателя выдается на использование элемента autoReconnect имущество. Я выполнил инструкции и увеличил свой сервер wait_timeout. Так как я использую ГСБД (я рассматриваю переход к c3po после прочтения нескольких постов на Stackoverflow сбив ГСБД), это нормально использовать autoReconnectForPools недвижимость? Что он на самом деле делает, когда включен в DBCP или в любом пуле соединений?

4b9b3361

Ответ 1

autoReconnect выдаст клиенту SQLException, но попытается восстановить соединение.

autoReconnectForPools попытается выполнить ping-сервер перед каждым выполнением SQL.

В прошлом у меня было много проблем с dbcp, особенно отключений. Большинство из них были решены путем перехода на c3p0. Обратите внимание, что драйвер mysql имеет тестер подключения для c3p0 (com.mysql.jdbc.integration.c3p0.MysqlConnectionTester).

Кроме того, вы можете проверить это: Параметры пула соединений с JDBC: DBCP vs C3P0

Ответ 2

Функция MySQL autoReconnect устарела, поскольку у нее много проблем (ref: официальная документация).

autoReconnectForPools имеет мало общего с autoReconnect, он больше связан с autoCommit и reconnectAtTxEnd - когда все 3 являются true, он будет пинговать сервер в конце каждой транзакции и автоматически при необходимости подключитесь.

Проверка соединения с DBCP несовершенна - даже когда параметр testOnBorrow установлен, он иногда возвращает неработающие соединения из пула (не говоря уже о проверке соединения до того, как каждый заем ужасно неэффективен).

Согласно в этой статье, HikariCP, похоже, является лучшей реализацией пула, поскольку он может использовать API JDBC4 isValid(), который много быстрее, чем запуск тестового запроса, и специально разработан, чтобы никогда не возвращать неработающие подключения к клиентскому приложению.

Ответ 3

Вы уверены, что используете DBCP правильно?

В соответствии с короткой записью , она должна обрабатывать таймауты довольно хорошо благодаря значению по умолчанию testOnBorrow=true (проверяет соединение перед использованием, и если он терпит неудачу, он удаляется из пула, и вместо этого мы пытаемся получить новый).

Единственное, что вам нужно сделать, это убедиться, что вы настроили свойство validationQuery на ненулевую строку, например. "SELECT 0" для базы данных MySQL (здесь - это сообщение о различных значениях validationQuery для каждого используемого БД).