Maison  >  Article  >  base de données  >  Comment réparer « MySQLNonTransientConnectionException : aucune opération autorisée après la fermeture de la connexion » dans les applications distantes ?

Comment réparer « MySQLNonTransientConnectionException : aucune opération autorisée après la fermeture de la connexion » dans les applications distantes ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 13:11:02586parcourir

How to Fix

Exception de connexion non transitoire MySQL

Problème :

Lors du déploiement d'une application à distance, l'exception "com.mysql .jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException : Aucune opération autorisée après la fermeture de la connexion" se produit après l'exécution de l'application pendant plus d'une journée.

Cause :

L'erreur est provoquée par une connexion fermée.

Solutions potentielles :

  1. Regroupement de connexions :

    Le système intégré d'Hibernate en ce qui concerne la mise en commun des connexions, elle est limitée. Pensez à utiliser une solution de regroupement de connexions tierce telle que C3P0.

    <code class="xml"><property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
    <property name="c3p0.min_size">5</property>
    <property name="c3p0.max_size">20</property>
    <property name="c3p0.max_statements">50</property>
    <property name="c3p0.maxIdleTime">3600</property></code>
  2. Testez la connexion avant utilisation :

    Créez un fichier "c3p0. Properties" à la racine du chemin de classe avec la propriété suivante :

    <code class="properties">c3p0.testConnectionOnCheckout=true</code>

    Cela testera chaque connexion avant de l'utiliser, ce qui peut aider à identifier et à fermer les connexions défectueuses.

Configuration hibernate.cfg.xml mise à jour :

<code class="xml"><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="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.max_statements">50</property>

<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="c3p0.max_statements">0</property>
<property name="c3p0.maxIdleTimeExcessConnections">3600</property>
<property name="c3p0.idleConnectionTestPeriod">3600</property>
<property name="c3p0.maxIdleTime">3600</property></code>

Remarque : Testez toujours toutes les modifications de configuration sur un environnement de développement ou de test avant de les déployer en production. .

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