Maison >base de données >tutoriel mysql >Comment réparer l'erreur « com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException : aucune opération autorisée après la fermeture de la connexion » en mise en veille prolongée ?
Diagnostic de l'erreur "com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException : Aucune opération autorisée après la fermeture de la connexion"
Lors de l'utilisation d'Hibernate avec des connexions à distance, vous pouvez rencontrer une erreur « Aucune opération autorisée après la fermeture de la connexion » en raison de connexions interrompues. Par défaut, MySQL dispose d'un paramètre wait_timeout qui peut entraîner la fermeture de la connexion après une période d'inactivité. Cela peut se produire lors d'exécutions prolongées d'applications ou en cas d'instabilité du réseau.
Regroupement de connexions avec C3P0
Pour résoudre ce problème, il est recommandé d'utiliser une bibliothèque de regroupement de connexions telle que C3P0. Le pool de connexions natif d'Hibernate est limité et ne convient pas aux environnements de production. Le regroupement de connexions établit un pool de connexions qui sont gérées et réutilisées par l'application, réduisant ainsi la surcharge liée à l'établissement de nouvelles connexions pour chaque requête.
Configuration de C3P0 avec Hibernate
Voici un fichier de configuration mis à jour à l'aide de C3P0 :
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/xyz</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.show_sql">false</property> <property name="hibernate.current_session_context_class">thread</property> <property name="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</property> <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">3600</property> <!-- seconds -->
Dans cette configuration, le fournisseur de connexion C3P0 est activé avec les paramètres appropriés pour la taille du pool, le délai d'attente et les tests de connexion.
Autre Causes potentielles
Si le regroupement de connexions ne résout pas le problème, il vaut la peine d'enquêter sur d'autres causes potentielles, telles que :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!