MySQL parece tener un tiempo de espera de 8 horas en sus conexiones. Estoy ejecutando múltiples WAR en Tomcat utilizando Hibernate para ORM. Después de 8 horas (es decir, durante la noche), obtengo tuberías rotas cuando detecta una conexión inactiva.Hibernate, C3P0, Mysql - Broken Pipe
Ya he rastreado el código y estoy doblemente seguro de confirmar o deshacer todas las transacciones.
Aquí es mi 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>
El parámetro pensé que habría fijado era el c3p0.idle_test_period
- Su valor predeterminado es 0. Sin embargo, aún tenemos el problema de tubería rota después de 8 horas de correr. Si bien hay varios posts indexados a través de Google, ninguno llega a una respuesta satisfactoria.
Gracias, esto me ayudó. Estoy de acuerdo con el comentario de la documentación. Peor aún, la documentación de c3p0 le aconseja utilizar c3p0.properties para todos los demás, excepto los 5 anteriores, pero eso no funciona. Solo funciona cuando especificas en persistence.xml sin el prefijo de hibernación (como lo hiciste en tu cfg.xml original) – Sun
Esto también me ayudó ... Estoy de acuerdo con la documentación :). Podría ser un poco más directo en su documentación. – Polaris878
Si usó la configuración xml para CombPooledDataSource, la propiedad es 'idleConnectionTestPeriod' que necesita tener. –