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
voir ma réponse et vérifiez également vérifier la compatibilité de la matrice situé sur hibernate.org (même si je m'ennuie de c3p0 en ce que la matrice)

OriginalL'auteur Dougnukem | 2009-09-03