Reproduce com.mysql.jdbc.exceptions.jdbc4.CommunicationsException con una configuración de Spring, hibernate y C3P0

Recibí este error del código de producción:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: El último paquete recibido con éxito del servidor fue hace 36940 segundos. El último paquete enviado con éxito al servidor fue hace 36940 segundos, que es más largo que el valor configurado por el servidor de 'wait_timeout'. Debería considerar la validez de la conexión y / o la prueba antes de usarla en su aplicación, aumentar los valores configurados del servidor para los tiempos de espera del cliente o usar la propiedad de conexión Connector / J 'autoReconnect = true' para evitar este problema.

Y ahora estoy tratando de reproducir el problema localmente y solucionarlo. Configuré el contexto de primavera de la siguiente manera:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close" p:driverClass="com.mysql.jdbc.Driver"
    p:jdbcUrl="jdbc:mysql://localhost:3306/test?userUnicode=yes&amp;characterEncoding=UTF-8&amp"
    p:idleConnectionTestPeriod="120" p:initialPoolSize="1" p:maxIdleTime="1800"
    p:maxPoolSize="1" p:minPoolSize="1" p:checkoutTimeout="1000"

/>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="hibernateProperties">
        <value>
            hibernate.connection.provider_class = org.hibernate.connection.C3P0ConnectionProvider
            hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
            hibernate.default_schema=platform_server_original
            hibernate.show_sql=false
        </value>
    </property>
    <property name="mappingResources">
        <list>
            <value>sometables.hbm.xml</value>
        </list>
    </property>
</bean>

Luego configuro mi mysql wait_timeout en 10 segundos, luego ejecuto mi prueba, que básicamente consiste en abrir una conexión, hacer una consulta, cerrarla, para que vuelva al grupo, luego suspender el hilo durante 15 segundos y luego abrir una conexión nuevamente , y hacer una consulta de nuevo, por lo que se romperá. Sin embargo, tengo un error similar solamente:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: error de enlace de comunicaciones

El último paquete enviado al servidor fue hace 16 ms.

Así que me pregunto si estos dos errores son iguales o son diferentes. Hice algunas investigaciones y parece que ambos errores se redujeron a la misma solución: usar una propiedad "testConnectionOnCheckout = true". Sin embargo, de acuerdo con c3p0 doc, este es un cheque muy costoso. Se recomienda el uso de "idleConnectionTestPeriod", pero ya lo estoy configurando en 120 segundos. ¿Qué valor debo usar para que pueda verificar correctamente la conexión inactiva?

Básicamente, pregunto dos cosas: 1. ¿Cómo reproduzco el error que obtuve en el código de producción? 2. ¿Cómo lo arreglo?

¡Gracias!

Respuestas a la pregunta(3)

Su respuesta a la pregunta