Maison  >  Article  >  base de données  >  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 ?

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 ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-27 02:28:02453parcourir

How to Fix the

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 :

  • Les paramètres du pare-feu ou du réseau bloquent les connexions
  • Problèmes de configuration MySQL, tels que des autorisations utilisateur incorrectes ou un pilote JDBC obsolète
  • Contraintes de mémoire ou de ressources sur le serveur ou l'application

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn