Hibernate c3p0 pool de connexion pas de délai d'inactivité de connexions
Nous avons un serveur java connexion à une base de données MySQL 5 usingHibernate que notre couche de persistance qui est à l'aide de c3p0 pour la connexion aux bases de la mutualisation.
J'ai essayé de suivre le c3p0 et documentation hibernate:
Nous obtenons une erreur sur nos serveurs de production en déclarant que:
... Causé par:
com.mysql.jdbc.des exceptions.jdbc4.MySQLNonTransientConnectionException:
Aucun des opérations après la connexion
fermé.Connexion a été implicitement
fermée en raison sous-jacente
exception/erreur:COMMENCER NESTED EXCEPTION
com.mysql.jdbc.des exceptions.jdbc4.CommunicationsException
MESSAGE: Le dernier paquet avec succès
reçu par le serveur was45000
quelques secondes auparavant.Le dernier paquet envoyé
avec succès au serveur a été 45000
quelques secondes auparavant, ce qui est plus long que le
serveur configuré valeur de
'wait_timeout'. Vous devriez envisager de
soit à l'expiration et/ou de test
connexion de validité avant de l'utiliser dans votre
l'application, en augmentant le serveur
valeurs configurées pour le client, les délais d'attente,
ou en utilisant le Connecteur/J de connexion
la propriété 'autoReconnect=true' pour éviter
ce problème.STACKTRACE:
com.mysql.jdbc.des exceptions.jdbc4.CommunicationsException:
Le dernier paquet reçu avec succès
à partir du serveur was45000 secondes
il ya.Le dernier paquet envoyé avec succès
le serveur a été 45000, quelques secondes auparavant,
qui est plus long que le serveur
valeur configurée de 'wait_timeout'.
Vous devriez expirant
et/ou des tests de validité des connexions de
avant de l'utiliser dans votre application,
l'augmentation du serveur configuré
les valeurs pour le client, les délais d'attente, ou à l'aide de
le Connecteur/J propriétés de connexion
'autoReconnect=true' pour éviter cela
problème.
Nous avons notre c3p0 le pool de connexion de propriétés de configuration comme suit:
hibernate.c3p0.max_size=10
hibernate.c3p0.min_size=1
hibernate.c3p0.timeout=5000
hibernate.c3p0.idle_test_period=300
hibernate.c3p0.max_statements=100
hibernate.c3p0.acquire_increment=2
La par défaut MySQL wait_timetout est fixé à 28 800 secondes (8 heures), le rapport d'erreur est de dire que cela fait plus de 45000 secondes (environ 12,5 heures). Bien que la c3p0 configuration indique qu'il va "timeout" connexions inactives qui n'ont pas été utilisés après 5000 secondes et il va vérifier toutes les 300 secondes, ainsi qu'une connexion inactive ne devrait jamais vivre plus longtemps que 5299 secondes?
Je l'ai testé en local par la définition de mon développeur base de données MySQL (my.ini sous windows, mon.cnf sur Unix) wait_timeout=60 et l'abaissement de la c3p0 délai d'inactivité de valeurs en-dessous de 60 secondes, et il correctement délai d'inactivité de connexions et d'en créer de nouveaux. J'ai également vérifier pour s'assurer que nous ne sommes pas des fuites DB connections et accrocher à la connexion, et il ne semble pas nous sommes.
Voici la c3p0.les propriétés de fichier que j'utilise pour tester dans mon environnement de développement pour assurer c3p0 est correctement gérer les connexions.
mise en veille prolongée.propriétés (test avec MySQL wait_timeout=60)
hibernate.c3p0.max_size=10
hibernate.c3p0.min_size=1
hibernate.c3p0.timeout=20
hibernate.c3p0.max_statements=100
hibernate.c3p0.idle_test_period=5
hibernate.c3p0.acquire_increment=2
c3p0.propriétés
com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL=ALL
com.mchange.v2.log.MLog=com.mchange.v2.log.FallbackMLog
c3p0.debugUnreturnedConnectionStackTraces=true
c3p0.unreturnedConnectionTimeout=10
OriginalL'auteur Dougnukem | 2009-09-03
Vous devez vous connecter pour publier un commentaire.
Assurez-vous que c3p0 est vraiment de commencer par examiner le journal. J'ai, pour une raison quelconque, avait deux versions de mise en veille prolongée (hibernate-core3.3.1.jar et hibernate-3.2.6GA.jar sur mon chemin de classe. J'ai aussi utilisé hibernate annotatations version 3.4.0 GA qui n'est pas compatible avec la 3.2.x. (ne sais pas si cela a quelque chose à voir avec le problème initial).
Après le retrait de l'un des hibernate pot (ne peux pas me rappeler qui je l'ai supprimé, probablement hibernate-3.2.6GA.jar) c3p0 enfin commencé et je me suis débarrasser de l'ennuyeux com.mysql.jdbc.des exceptions.jdbc4.CommunicationsException qui s'est vraiment passé efter 8h inactivité.
essayez de mettre à niveau hibernate 3.3.X, la combinaison ci-dessus n'est pas pris en charge par hibernate. (ou de modèle d'hibernate annotations)
rien essayé? un peu de chance encore?
ok, c'est intéressant. aussi loin que je peux voir, la seule chose que vous avez ajouté était mise en veille prolongée.connexion.provider_class=org.mise en veille prolongée.connexion.C3P0ConnectionProvider ?
Je sais que je suis lat sur cette question, mais cela pourrait être utile pour les personnes à la recherche de réponses : il semble que ce provider_class paramètre a été ajouté à l'article 3.2 et est maintenant nécessaire, mais pas très bien documenté. Voir agileapproach.com/blog-entry/...
OriginalL'auteur Schildmeijer