sql >> Database >  >> RDS >> Mysql

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:geen bewerkingen toegestaan ​​nadat de verbinding is gesloten

Zoals @swanliu aangaf, is dit te wijten aan een slechte verbinding.
Maar voordat ik de servertiming en clienttime-out aanpas, zou ik eerst proberen een betere strategie voor het poolen van verbindingen te gebruiken.

Verbindingspooling

Hibernate geeft zelf toe dat zijn strategie voor het poolen van verbindingen minimaal is

Ik gebruik persoonlijk C3P0 . er zijn echter andere alternatieven beschikbaar, waaronder DBCP .
Bekijk

Hieronder staat een minimale configuratie van C3P0 die in mijn toepassing wordt gebruikt:

<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="c3p0.acquire_increment">1</property> 
<property name="c3p0.idle_test_period">100</property> <!-- seconds --> 
<property name="c3p0.max_size">100</property> 
<property name="c3p0.max_statements">0</property> 
<property name="c3p0.min_size">10</property> 
<property name="c3p0.timeout">1800</property> <!-- seconds --> 

Bewerken:
Ik heb het configuratiebestand bijgewerkt (Referentie ), aangezien ik die voor mijn project eerder had gekopieerd en geplakt. De time-out zou het probleem idealiter moeten oplossen. Als dat niet voor u werkt, is er een dure oplossing waarvan ik denk dat je die zou kunnen bekijken:

Maak een bestand "c3p0.properties" dat zich in de hoofdmap van het klassenpad moet bevinden (d.w.z. het kan niet worden overschreven voor bepaalde delen van de toepassing). (Referentie )

# c3p0.properties
c3p0.testConnectionOnCheckout=true

Met deze configuratie wordt elke verbinding getest voordat deze wordt gebruikt. Het kan echter de prestaties van de site beïnvloeden.



  1. SQL-query toont niet verwacht resultaat

  2. hoe mysql-tabelgrootte in GB te krijgen?

  3. MySql ERROR 1045 (28000):Toegang geweigerd voor gebruiker 'root'@'localhost' (met wachtwoord:NEE)

  4. Wat is de limiet van SQL-variabelen die men kan specificeren in een enkele execSQL-query?