Mysql
 sql >> база данни >  >> RDS >> Mysql

Не може да се свърже с базата данни след известно време на внедряване на сървъра

Във вашите конфигурационни свойства сте използвали свойството 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 . Каквото и обединяване на връзки да използвате, зависи от вас.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Код на грешка в MySQL:1305. FUNCTION JSON_EXTRACT не съществува във версия на MySQL клиент:5.5.52

  2. Използване на рекурсия за изграждане на навигация

  3. Как да накарам mysql MEMORY ENGINE да съхранява повече данни?

  4. Не всички параметри са използвани в SQL израза (Python, MySQL)

  5. SQL:Как да поддържам ред на редовете с DISTINCT?