Mysql
 sql >> Base de données >  >> RDS >> Mysql

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException :aucune opération autorisée après la fermeture de la connexion

Comme @swanliu l'a souligné, cela est dû à une mauvaise connexion.
Cependant, avant d'ajuster la synchronisation du serveur et le délai d'expiration du client, j'essaierais d'abord d'utiliser une meilleure stratégie de regroupement des connexions.

Regroupement de connexions

Hibernate lui-même admet que sa stratégie de regroupement de connexions est minimale

J'utilise personnellement C3P0 . cependant, il existe d'autres alternatives disponibles, y compris DBCP .
Vérifier

Vous trouverez ci-dessous une configuration minimale de C3P0 utilisée dans mon application :

<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 --> 

Modifier :
J'ai mis à jour le fichier de configuration (Référence ), car je venais de copier-coller celui de mon projet plus tôt. Le délai d'attente devrait idéalement résoudre le problème. Si cela ne fonctionne pas pour vous, il existe une solution coûteuse que je pense que vous pourriez jeter un œil :

Créez un fichier "c3p0.properties" qui doit être à la racine du chemin de classe (c'est-à-dire qu'il n'y a aucun moyen de le remplacer pour des parties particulières de l'application). (Référence )

# c3p0.properties
c3p0.testConnectionOnCheckout=true

Avec cette configuration, chaque connexion est testée avant d'être utilisée. Cela pourrait toutefois affecter les performances du site.