Hibernate, C3P0, пул подключений Mysql

Недавно я переключился с пула соединений Apache DBCP на C3P0 и просмотрел свои журналы, чтобы увидеть, есть ли проблемы с тайм-аутом соединения. Раньше у меня не было такого с DBCP и Tomcat, поэтому мне интересно, проблема ли это в конфигурации или в драйвере.

Всякий раз, когда я загружаю страницу после того, как сервер какое-то время бездействует, я вижу, что какой-то контент не отправляется (поскольку сервер не может получить соединение или что-то в этом роде). Когда я обновляю страницу, все содержимое на ней.

Кто-нибудь рекомендует использовать пул соединений MySQL, поскольку я все равно использую MySQL? Каков ваш опыт работы с пулом подключений MySQL?

Уолтер


person Community    schedule 07.12.2009    source источник


Ответы (2)


Если база данных, с которой вы работаете, настроена на тайм-аут соединений после определенного времени бездействия, они уже закрыты и, следовательно, непригодны для использования при заимствовании из пула.

Если вы не можете или не хотите перенастроить сервер базы данных, вы можете настроить C3P0 (и большинство других пулов соединений) для проверки соединений с помощью тестового запроса, когда они заимствованы из пула. Более подробную информацию можно найти в соответствующем разделе документации C3P0 .

Изменить: Конечно, вы правы, также возможно, что в пуле DBCP было настроено максимальное время простоя, из-за чего они были удалены из пула до того, как истечет время ожидания. В любом случае, использование тестового запроса или проверка того, что соединения удалены из пула до истечения времени ожидания, должны решить проблему.

person Henning    schedule 07.12.2009
comment
хороший момент - мне нужно будет посмотреть, что он установлен по умолчанию. Возможно, я пропустил настройку в c3p0, тогда как у меня был установлен тайм-аут в dbcp. - person ; 07.12.2009
comment
Я думаю, что произошло то, что я удалил параметры конфигурации из своего persistence.xml, которые, как мне казалось, не использовались. Я не устанавливал их в своем jetty-env.xml, поэтому, похоже, я удалил важную конфигурацию. - person ; 09.12.2009

Просто добавление ссылки на другой пул соединений; BoneCP (http://jolbox.com); пул соединений, который работает быстрее, чем C3P0 и DBCP.

Как и C3P0 и DBCP, убедитесь, что вы настроили тестирование соединения в режиме ожидания, чтобы избежать описанного вами сценария (вероятно, срабатывает параметр MySQL wait_timeout, обычно установленный на 8 часов).

person wwadge    schedule 08.12.2009
comment
Да, я наткнулся на это, не уверен, что попробую. В целом я доволен C3P0, несмотря на то, что он не поддерживается. - person ; 09.12.2009
comment
Взгляните на тесты, C3P0 выходит из строя при большой нагрузке на поток :-( - person wwadge; 07.04.2010