Във вашите конфигурационни свойства сте използвали свойството c3p0 maxIdleTime, но свойствата на c3p0 се конфигурират с помощта на c3p0.
префикс или hibernate.c3p0.
. Имайте предвид, че разрешаването на който и да е от c3p0
свойства автоматично активира съответния доставчик на връзка чрез евристика на хибернация. В дневника не се вижда, че използвате c3p0. Ако не сте конфигурирани източници на данни, Hibernate ще използва hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider
. Този доставчик на връзка има вграден основен пул за връзки, за който можете да зададете hibernate.connection.pool_size
, но се използва само за целите на разработката. Никога не го използвайте в производствена среда.
Може да имате безкрайни дискусии по темата Как да коригирате java.net.SocketException:Счупена тръба . След известно време ще разберете, че сте останали отворени връзки в басейна, които внезапно се затварят от другата страна поради следните причини:
- Защитните стени или рутери може да блокират неактивни връзки (протоколът клиент/сървър на MySQL не работи).
- MySQL сървърът може да затваря неактивни връзки, които надвишават
wait_timeout
илиinteractive_timeout
праг.
За да помогнете за отстраняването на тези проблеми, могат да се използват следните съвети:
- Използва се последна (5.1.13+) версия на JDBC драйвер.
- Уверете се, че
wait_timeout
иinteractive_timeout
са поставени достатъчно високо. Проверете далиinteractiveClient
се използва. - Уверете се, че
tcpKeepalive
е активирана. - Уверете се, че всички конфигурируеми настройки за изчакване на защитната стена или рутера позволяват максималното очаквано време на престой на връзката.
- Уверете се, че връзките са валидни, когато се използват от пула за връзки. Използвайте заявка, която започва с
/* ping */
за изпълнение на лек ping вместо пълна заявка. Имайте предвид, че синтаксисът на ping трябва да бъде точно както е посочено тук. - Изрично потвърдете връзката, преди да я използвате, ако връзката е била неактивна за продължителен период от време.
- Намалете до минимум продължителността, през която обектът за връзка е оставен неактивен, докато се изпълнява друга логика на приложението.
За да се съобразите с някои от тези опции, по-добре е да използвате пул за връзки, който можете да използвате с Hibernate. Hibernate има поддръжка за commons-dbcp, c3p0 и proxool. Също така можете да конфигурирате JNDI източник на данни на уеб сървър за използване с хибернация, той има пул за връзки. Вижте Глава 7 Обединяване на връзки с конектор/J .
Ако искате да конфигурирате Hibernate с c3p0, трябва да прочетете това Как да конфигурирате пула за връзки C3P0 . За примерна конфигурация на dbcp трябва да проверите тази публикация Изключение на MySQL, Hibernate и Broken Pipe . Каквото и обединяване на връзки да използвате, зависи от вас.