sql >> Database teknologi >  >> RDS >> Mysql

Ikke i stand til at oprette forbindelse til databasen efter nogle tidspunkter med udrulning på serveren

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 og interactive_timeout er sat tilstrækkeligt højt. Tjek om interactiveClient 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.



  1. Sådan beregnes procent i PostgreSQL

  2. Beregn alder fra fødselsdag med oracle plsql trigger og indsæt alderen i tabellen

  3. MySQL Trigger kan ikke opdatere tabellen - får ERROR 1442

  4. finde produkter, som kunderne har købt sammen