I dine konfigurationsegenskaber har du brugt c3p0-egenskaben maxIdleTime, men c3p0-egenskaberne er konfigureret ved hjælp af c3p0.
præfiks eller hibernate.c3p0.
. Bemærk, at aktivering af enhver af c3p0
egenskaber aktiverer automatisk den tilsvarende forbindelsesudbyder ved dvaleheuristik. I loggen ses ikke, at du bruger c3p0. Hvis du ikke er konfigureret datakilder, vil Hibernate bruge hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider
. Denne forbindelsesudbyder har indbygget rudimentær forbindelsespulje, som du kan indstille en hibernate.connection.pool_size
til , men det bruges kun til udviklingsformål. Brug det aldrig i produktionsmiljøet.
Du kan have endeløs diskussion om emnet Sådan repareres java.net.SocketException:Broken pipe . Efter nogen tid vil du indse, at du er forblevet åben tilslutninger i poolen, som pludselig er lukket på den anden side af følgende årsager:
- Firewalls eller routere kan klemme ned på inaktive forbindelser (MySQL-klient-/serverprotokollen virker ikke).
- MySQL-serveren lukker muligvis inaktive forbindelser, der overstiger
wait_timeout
ellerinteractive_timeout
Grænseværdi.
For at hjælpe med at fejlfinde disse problemer kan følgende tip bruges:
- Der bruges en nyere (5.1.13+) version af JDBC-driveren.
- Sørg for, at
wait_timeout
oginteractive_timeout
er sat tilstrækkeligt højt. Tjek ominteractiveClient
bruges. - Sørg for, at
tcpKeepalive
er aktiveret. - Sørg for, at alle konfigurerbare indstillinger for firewall eller router timeout giver mulighed for den maksimale forventede inaktive forbindelsestid.
- Sørg for, at forbindelser er gyldige, når de bruges fra forbindelsespuljen. Brug en forespørgsel, der starter med
/* ping */
at udføre en letvægts-ping i stedet for fuld forespørgsel. Bemærk, syntaksen for ping skal være nøjagtig som angivet her. - Valider eksplicit forbindelsen, før du bruger den, hvis forbindelsen har været inaktiv i en længere periode.
- Minimer varigheden af et forbindelsesobjekt efterlades inaktivt, mens anden applikationslogik udføres.
For at overholde nogle af disse muligheder må du hellere bruge en forbindelsespool, som du kan bruge med Hibernate. Hibernate har understøttelse af commons-dbcp, c3p0 og proxool. Du kan også konfigurere JNDI-datakilden på webserveren til brug med dvale, den har en forbindelsespulje. Se kapitel 7 Forbindelsespooling med Connector/J .
Hvis du kan lide at konfigurere Hibernate med c3p0, bør du læse denne Sådan konfigurerer du C3P0-forbindelsespuljen . For dbcp-eksempelkonfiguration bør du tjekke dette indlæg MySQL, Hibernate og Broken Pipe Exception . Uanset hvilken forbindelsespooling du vil bruge, er op til dig.