sql >> Database >  >> RDS >> Mysql

Kan geen verbinding maken met de database na enige tijd van implementatie op de server

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 en interactive_timeout voldoende hoog zijn ingesteld. Controleer of interactiveClient 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.



  1. Hoe doe je mee aan dezelfde tafel, twee keer, in mysql?

  2. Uw SQL Server-workload leren kennen

  3. Oracle.DataAccess niet beschikbaar voor selectie in Visual Studio 2013

  4. Hoe maak je een index voor elementen van een array in PostgreSQL?