MySQL semble avoir un délai de 8 heures sur ses connexions. J'utilise plusieurs WAR dans Tomcat en utilisant Hibernate pour ORM. Au bout de 8 heures (c'est-à-dire pendant la nuit), j'ai des tuyaux cassés quand il prend une connexion inactive.Hibernate, C3P0, Mysql - Broken Pipe
J'ai déjà suivi le code et j'ai doublement vérifié que je validais ou annulais toutes les transactions.
Voici mon hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.bytecode.use_reflection_optimizer">false</property>
<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="hibernate.current_session_context_class">thread</property>
<!--property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property-->
<property name="c3p0.min_size">3</property>
<property name="c3p0.max_size">5</property>
<property name="c3p0.timeout">1800</property>
<property name="c3p0.preferredTestQuery">SELECT 1</property>
<property name="c3p0.testConnectionOnCheckout">true</property>
<property name="c3p0.idle_test_period">100</property> <!-- seconds -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="cache.use_query_cache">false</property>
<property name="cache.use_minimal_puts">false</property>
<property name="max_fetch_depth">10</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- classes removed -->
</session-factory>
Le paramètre que je pensais aurait fixé ce fut le c3p0.idle_test_period
- Sa valeur par défaut 0. Cependant, nous avons encore la question de Broken Pipe après 8 heures de fonctionnement. Bien qu'il existe plusieurs index de messages via Google, aucun n'arrive à une réponse satisfaisante.
Merci, cela m'a aidé. Je suis d'accord avec le commentaire de la documentation. Pire encore, la documentation c3p0 vous conseille d'utiliser c3p0.properties pour tous les autres sauf les 5 ci-dessus, mais cela ne fonctionne pas. Cela ne fonctionne que lorsque vous spécifiez dans le fichier persistence.xml sans le préfixe hibernate (comme vous l'avez fait dans votre fichier cfg.xml d'origine) – Sun
Cela m'a aidé aussi ... Je suis d'accord sur la chose de la documentation :). Cela pourrait être un peu plus simple dans leur documentation. – Polaris878
Si vous avez utilisé la config xml pour CombPooledDataSource, la propriété est "idleConnectionTestPeriod" dont vous avez besoin. –