Maison  >  Article  >  base de données  >  Comment gérer l'exception « Aucune opération autorisée après la fermeture de la connexion » dans les interactions de base de données ?

Comment gérer l'exception « Aucune opération autorisée après la fermeture de la connexion » dans les interactions de base de données ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-26 05:05:30197parcourir

How to Handle

Aucune opération autorisée après la fermeture de la connexion Exception

Description :

Cette exception se produit lorsqu'un une tentative est effectuée pour exécuter une opération après la fermeture de la connexion à la base de données. La cause sous-jacente est souvent un problème de délai d'attente de connexion.

Causes possibles :

  • Délai d'attente côté serveur (par exemple, le délai d'attente de MySQL)
  • Délais d'expiration côté client
  • Mauvaise configuration du pool de connexions

Solution :

Regroupement de connexions

Assurez-vous qu'une bibliothèque de regroupement de connexions tierce est utilisée à la place du pool de connexions par défaut d'Hibernate, car elle n'est pas adaptée aux environnements de production. Pensez à utiliser C3P0 ou DBCP.

Configuration du délai d'expiration côté serveur

Ajustez le paramètre wait_timeout dans MySQL à une valeur plus élevée pour éviter les fermetures prématurées de connexion.

Configuration du délai d'expiration côté client

Augmentez les propriétés maxConnectionAge et maxIdleTime du pool de connexions pour prolonger la durée de vie des connexions.

Exemple de configuration C3P0 :

<code class="xml"><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">1800</property> <!-- seconds --> </code>

Remarque supplémentaire :

La propriété "c3p0.testConnectionOnCheckout=true" peut être définie pour tester les connexions avant d'être utilisée, mais cela peut avoir un impact sur les performances.

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