Maison > base de données > tutoriel mysql > Pourquoi est-ce que j'obtiens \'MySQLNonTransientConnectionException : Aucune opération autorisée après la fermeture de la connexion\' et comment puis-je y remédier ?

Pourquoi est-ce que j'obtiens \'MySQLNonTransientConnectionException : Aucune opération autorisée après la fermeture de la connexion\' et comment puis-je y remédier ?

Susan Sarandon
Libérer: 2024-10-30 04:59:02
original
1033 Les gens l'ont consulté

Why Am I Getting

Délai d'expiration de la base de données et surcharge du pool de connexions

Ce problème Hibernate, "com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException : aucune opération autorisée après la fermeture de la connexion", se produit lorsqu'une connexion persistante est implicitement fermée en raison de l'inactivité.

Cause :

La connexion est établie mais reste inactive pendant une période prolongée, dépassant le "wait_timeout" du serveur ou les paramètres de délai d'expiration du client comme "connectionTimeout".

Résolution :

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

  • Côté serveur, augmentez le paramètre "wait_timeout" dans la configuration MySQL.
  • Côté client, spécifiez le "connectionTimeout" et les propriétés "readTimeout" dans la configuration de votre connexion.

2. Configurez le pool de connexions :

  • Utilisez un pool de connexions tiers tel que C3P0 au lieu du pool intégré d'Hibernate.
  • Configurez les paramètres de pool appropriés tels que "maxPoolSize", " minPoolSize", "idleTimeout" et "maxIdleTime."

Exemple de configuration hibernate.cfg.xml utilisant C3P0 :

<code class="xml"><property name="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.timeout">1800</property>
<property name="c3p0.idleTestPeriod">3600</property>
<property name="c3p0.maxIdleTime">3600</property></code>
Copier après la connexion

Supplémentaire Conseils :

  • Vérifiez les pare-feu ou les serveurs proxy susceptibles de bloquer ou d'expirer les connexions.
  • Envisagez d'utiliser un pilote JDBC prenant en charge le pool de connexions JDBC, comme MySQL Connector/ J.
  • Surveillez les modèles d'utilisation des connexions et ajustez la taille des pools en conséquence.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal