В чем разница между 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 в используемой БД).