In uw configuratie-eigenschappen hebt u c3p0-eigenschap maxIdleTime gebruikt, maar c3p0-eigenschappen zijn geconfigureerd met c3p0.
prefix of hibernate.c3p0.
. Merk op dat het inschakelen van een van c3p0
eigenschappen schakelt automatisch de corresponderende verbindingsprovider in via hibernate-heuristiek. In de log is niet te zien dat je c3p0 gebruikt. Als u geen gegevensbronnen hebt geconfigureerd, gebruikt Hibernate hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider
. Deze verbindingsprovider heeft een ingebouwde rudimentaire verbindingspool waarvoor u een hibernate.connection.pool_size
kunt instellen , maar het wordt alleen gebruikt voor ontwikkelingsdoeleinden. Gebruik het nooit in de productieomgeving.
Je hebt misschien eindeloze discussies over het onderwerp Hoe java.net.SocketException:Broken pipe te repareren . Na enige tijd zul je je realiseren dat je open bent gebleven aansluitingen in het zwembad, die aan de andere kant plotseling worden afgesloten om de volgende redenen:
- Firewalls of routers kunnen inactieve verbindingen afremmen (het MySQL-client/server-protocol werkt niet).
- De MySQL-server sluit mogelijk inactieve verbindingen die de
wait_timeout
overschrijden ofinteractive_timeout
drempel.
Om deze problemen op te lossen, kunnen de volgende tips worden gebruikt:
- Er wordt een recente (5.1.13+) versie van het JDBC-stuurprogramma gebruikt.
- Zorg ervoor dat
wait_timeout
eninteractive_timeout
voldoende hoog zijn ingesteld. Controleer ofinteractiveClient
wordt gebruikt. - Zorg ervoor dat
tcpKeepalive
is ingeschakeld. - Zorg ervoor dat alle configureerbare firewall- of routertime-outinstellingen de maximale verwachte inactieve tijd van de verbinding toestaan.
- Zorg ervoor dat verbindingen geldig zijn bij gebruik vanuit de verbindingspool. Gebruik een zoekopdracht die begint met
/* ping */
om een lichtgewicht ping uit te voeren in plaats van een volledige query. Let op, de syntaxis van de ping moet precies zijn zoals hier gespecificeerd. - Bevestig de verbinding expliciet voordat u deze gebruikt als de verbinding gedurende langere tijd niet wordt gebruikt.
- Minimaliseer de duur dat een verbindingsobject inactief blijft terwijl andere applicatielogica wordt uitgevoerd.
Om aan sommige van deze opties te voldoen, kunt u beter een verbindingspool gebruiken die u met Hibernate kunt gebruiken. Hibernate heeft ondersteuning voor commons-dbcp, c3p0 en proxool. U kunt ook de JNDI-gegevensbron op de webserver configureren voor gebruik met de slaapstand, deze heeft een verbindingspool. Zie Hoofdstuk 7 Verbindingspooling met Connector/J .
Als je Hibernate met c3p0 wilt configureren, lees dan deze How-To configure the C3P0 connection pool . Voor dbcp-voorbeeldconfiguratie moet u dit bericht bekijken MySQL, Hibernate en Broken Pipe Exception . Welke verbindingspooling u ook gaat gebruiken, het is aan u.