Maison  >  Article  >  base de données  >  Comment dépanner \"com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException : aucune opération autorisée après la fermeture de la connexion\" ?

Comment dépanner \"com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException : aucune opération autorisée après la fermeture de la connexion\" ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-25 17:10:02753parcourir

How to Troubleshoot

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

Problème :
Lors du déploiement d'une application sur un serveur distant, une exception de connexion MySQL se produit après plus d'une journée d'exécution de l'application. Le message d'exception indique qu'aucune opération n'est autorisée après la fermeture de la connexion.

Cause :
L'exception est probablement causée par une connexion interrompue en raison de l'inactivité. Les paramètres de délai d'attente par défaut pour le serveur et le client MySQL peuvent être trop courts, entraînant la fermeture prématurée des connexions.

Solution :

1. Ajuster les délais d'attente du serveur et du client

  • Serveur (configuration MySQL) :

    • Augmentez la valeur "wait_timeout" dans MySQL fichier de configuration de la base de données (my.cnf ou my.ini). Ce paramètre détermine la durée maximale pendant laquelle une connexion peut rester inactive avant d'être fermée.
  • Client (pool de connexions Hibernate/JDBC) :

    • Définissez la propriété "timeout" dans le fichier de configuration Hibernate sur une valeur plus élevée, telle que les 600 secondes recommandées (10 minutes). Cela garantit qu'Hibernate ne ferme pas les connexions trop rapidement.

2. Activer le pool de connexions

  • Utilisez un pool de connexions tel que C3P0 ou DBCP pour gérer efficacement les connexions à la base de données. Les pools de connexions créent et maintiennent un pool de connexions préétablies, réduisant ainsi la surcharge liée à l'ouverture et à la fermeture des connexions à chaque fois.
  • Configurez le pool de connexions pour vérifier et valider automatiquement les connexions avant utilisation. Cela garantit que toutes les connexions rompues sont détectées et supprimées, évitant ainsi les exceptions.

Mesures supplémentaires :

  • Définissez la propriété « autoReconnect » dans la configuration du pool de connexions JDBC sur true. Cela permet au pool de rétablir automatiquement les connexions en cas d'échec.
  • Utilisez la propriété "testConnectionOnCheckout" pour tester les connexions avant de les utiliser. Cela garantit que toutes les connexions obsolètes sont détectées et supprimées du pool.
  • Surveillez les journaux d'application régulièrement pour détecter rapidement tout problème de connexion potentiel.

Configuration Hibernate mise à jour :

Le fichier de configuration Hibernate mis à jour fourni utilise le pool de connexions C3P0 et inclut les paramètres recommandés :

<hibernate-configuration>
  <session-factory>
    <!-- Database connection settings -->
    <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>

    <!-- Enable C3P0 connection pooling -->
    <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
    <property name="c3p0.max_size">20</property>
    <property name="c3p0.min_size">5</property>
    <property name="c3p0.max_statements">0</property>
    <property name="c3p0.timeout">600</property>
    <property name="c3p0.idleConnectionTestPeriod">3600</property>
    <property name="c3p0.testConnectionOnCheckout">true</property>
  </session-factory>
</hibernate-configuration>

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