2010-09-21 10 views
2

J'utilise Spring JdbcTemplate pour effectuer des opérations SQL sur un bien commun apache source de données (org.apache.commons.dbcp.BasicDataSource) et lorsque le service est opérationnel à long, je finis par obtenir cette exception:Spring JDBModifier d'autres sources de données MySQL que les communs apache?

org.springframework.dao.RecoverableDataAccessException: StatementCallback; SQL [SELECT * FROM vendor ORDER BY name]; The last packet successfully received from the server was 64,206,061 milliseconds ago. The last packet sent successfully to the server was 64,206,062 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 64,206,061 milliseconds ago. The last packet sent successfully to the server was 64,206,062 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem. 
    at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:98) 
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) 
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80) 
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:406) 
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:455) 
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:463) 
    at com.cable.comcast.neto.nse.taac.dao.VendorDao.getAllVendor(VendorDao.java:25) 
    at com.cable.comcast.neto.nse.taac.controller.RemoteVendorAccessController.requestAccess(RemoteVendorAccessController.java:78) 

J'ai essayé d'ajouter 'autoReconnect = true' à la chaîne de connexion, mais ce problème persiste. Y a-t-il une autre source de données qui puisse gérer la reconnexion pour moi?

Répondre

0

Vous pouvez essayer de C3PO:

http://sourceforge.net/projects/c3p0/

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close"> 
    <property name="user" value="${db.username}"/> 
    <property name="password" value="${db.password}"/> 
    <property name="driverClass" value="${db.driverClassName}"/> 
    <property name="jdbcUrl" value="${db.url}"/> 
    <property name="initialPoolSize" value="0"/> 
    <property name="maxPoolSize" value="1"/> 
    <property name="minPoolSize" value="1"/> 
    <property name="acquireIncrement" value="1"/> 
    <property name="acquireRetryAttempts" value="0"/> 
    <property name="idleConnectionTestPeriod" value="600"/> <!--in seconds--> 
</bean> 

grettings pacovr

1

BasicDataSource peut gérer garder les connexions en vie pour vous. Vous devez définir les propriétés suivantes:

minEvictableIdleTimeMillis = 120000 // Two minutes 
testOnBorrow = true 
timeBetweenEvictionRunsMillis = 120000 // Two minutes 
minIdle = (some acceptable number of idle connections for your server) 

Ces configurera la source de données pour maintenir en permanence tester vos connexions, et viennent à échéance et de les supprimer si elles deviennent obsolètes. Il existe un certain nombre d'autres propriétés sur la source de données de base que vous voudrez peut-être envisager de modifier pour améliorer les performances de votre pool de connexion. J'ai rencontré des problèmes étranges dans le passé où j'avais des problèmes avec mon accès à la base de données et tout est venu à la façon dont le pool de connexion a été configuré.