I dina konfigurationsegenskaper har du använt c3p0-egenskapen maxIdleTime, men c3p0-egenskaperna konfigureras med c3p0.
prefix eller hibernate.c3p0.
. Observera att aktivera någon av c3p0
egenskaper aktiverar automatiskt motsvarande anslutningsleverantör genom vilolägesheuristik. I loggen syns inte att du använder c3p0. Om du inte är konfigurerade datakällor kommer Hibernate att använda hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider
. Denna anslutningsleverantör har en inbyggd rudimentär anslutningspool för vilken du kan ställa in en hibernate.connection.pool_size
, men den används endast för utvecklingsändamål. Använd den aldrig i produktionsmiljön.
Du kan ha oändliga diskussioner om ämnet Hur man fixar java.net.SocketException:Broken pipe . Efter en tid kommer du att inse att du har varit öppen anslutningar i poolen, som plötsligt stängs på andra sidan av följande skäl:
- Brandväggar eller routrar kan slå ner på lediga anslutningar (MySQL-klient-/serverprotokollet fungerar inte).
- MySQL-servern kan stänga inaktiva anslutningar som överskrider
wait_timeout
ellerinteractive_timeout
tröskel.
Följande tips kan användas för att felsöka dessa problem:
- En nyligen (5.1.13+) version av JDBC-drivrutinen används.
- Se till att
wait_timeout
ochinteractive_timeout
är inställda tillräckligt högt. Kontrollera ominteractiveClient
används. - Se till att
tcpKeepalive
är aktiverad. - Se till att alla konfigurerbara brandväggs- eller routerinställningar tillåter den maximala förväntade vilotiden för anslutningen.
- Se till att anslutningarna är giltiga när de används från anslutningspoolen. Använd en fråga som börjar med
/* ping */
att köra en lätt ping istället för en fullständig fråga. Observera att syntaxen för ping måste vara exakt som specificeras här. - Verifiera anslutningen uttryckligen innan du använder den om anslutningen har lämnats inaktiv under en längre tid.
- Minimera hur länge ett anslutningsobjekt lämnas inaktivt medan annan programlogik körs.
För att uppfylla vissa av dessa alternativ är det bättre att använda en anslutningspool som du kan använda med Hibernate. Hibernate har stöd för commons-dbcp, c3p0 och proxool. Du kan också konfigurera JNDI-datakällan på webbservern att använda med viloläge, den har en anslutningspool. Se kapitel 7 Anslutningspoolning med Connector/J .
Om du vill konfigurera Hibernate med c3p0 bör du läsa detta Så här konfigurerar du C3P0-anslutningspoolen . För dbcp-exempelkonfiguration bör du kolla detta inlägg MySQL, Hibernate och Broken Pipe Exception . Vilken anslutningspoolning du än använder är upp till dig.