sql >> Databáze >  >> RDS >> Mysql

Po určité době nasazení na serveru se nelze připojit k databázi

Ve vlastnostech konfigurace jste použili vlastnost c3p0 maxIdleTime, ale vlastnosti c3p0 se konfigurují pomocí c3p0. prefix nebo hibernate.c3p0. . Všimněte si, že povolení libovolného z c3p0 vlastnosti automaticky povolí příslušného poskytovatele připojení pomocí heuristiky hibernace. V protokolu není vidět, že používáte c3p0. Pokud nemáte nakonfigurovány zdroje dat, Hibernate použije hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider . Tento poskytovatel připojení má vestavěný základní fond připojení, pro který můžete nastavit hibernate.connection.pool_size , ale používá se pouze pro účely vývoje. Nikdy jej nepoužívejte v produkčním prostředí.

Možná budete mít nekonečnou diskusi na téma Jak opravit java.net.SocketException:Broken pipe . Po nějaké době si uvědomíte, že jste zůstali otevření přípojky v bazénu, které jsou náhle uzavřeny na druhé straně z následujících důvodů:

  • Firewally nebo routery mohou přerušit nečinná připojení (protokol MySQL klient/server nezaznamenává).
  • Server MySQL může uzavírat nečinná připojení, která překračují wait_timeout nebointeractive_timeout práh.

K řešení těchto problémů lze použít následující tipy:

  • Je použita nejnovější verze (5.1.13+) ovladače JDBC.
  • Zajistěte, aby wait_timeout a interactive_timeout jsou nastaveny dostatečně vysoko. Zkontrolujte, zda interactiveClient se používá.
  • Ujistěte se, že tcpKeepalive je povoleno.
  • Zajistěte, aby všechna konfigurovatelná nastavení časového limitu brány firewall nebo směrovače umožňovala maximální očekávanou dobu nečinnosti připojení.
  • Zajistěte, aby byla připojení platná, když jsou použita z fondu připojení. Použijte dotaz, který začíná /* ping */ k provedení lehkého pingu namísto úplného dotazu. Všimněte si, že syntaxe příkazu ping musí být přesně taková, jak je zde uvedeno.
  • Pokud bylo připojení ponecháno delší dobu nečinné, před jeho použitím připojení výslovně ověřte.
  • Minimalizujte dobu, po kterou je objekt připojení ponechán nečinný, zatímco se provádí jiná aplikační logika.

Abyste vyhověli některým z těchto možností, raději použijte fond připojení, který můžete použít s režimem spánku. Hibernate má podporu pro commons-dbcp, c3p0 a proxool. Také můžete nakonfigurovat zdroj dat JNDI na webovém serveru pro použití s ​​režimem spánku, má fond připojení. Viz Kapitola 7 Sdružování připojení pomocí konektoru/J .

Pokud chcete konfigurovat Hibernate pomocí c3p0, měli byste si přečíst tento Jak nakonfigurovat fond připojení C3P0 . Pro příklad konfigurace dbcp byste měli zkontrolovat tento příspěvek MySQL, Hibernate a Broken Pipe Exception . Jaké sdružování připojení použijete, je jen na vás.



  1. Spuštění Total-Order By Date v SQLite

  2. Jak bych měl řešit --secure-file-priv v MySQL?

  3. proč potřebujeme levé a pravé spojení

  4. MySQL šifrované sloupce