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

в ссылке конфигурации для MySql драйвер разъема J, предупреждение emptor выдается на использование автореконнект собственность. Я последовал инструкциям и увеличилwait_timeout. Поскольку я использую DBCP (я рассматриваю возможность перехода на c3po после чтения нескольких сообщений о StackOverflow, сбивающем DBCP), можно ли использовать autoReconnectForPools собственность ? Что он делает, когда включен в DBCP или любой пул соединений, если на то пошло ?

3 ответов


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

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

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

также вы можете чтобы проверить это: параметры пула соединений с JDBC: DBCP vs C3P0


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

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

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

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


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

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

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