我正在努力配置Tomcat JDBC连接池以实现可靠性。当前的问题是,在测试环境中,我在webapp中有以下scanerio:
我已经配置validationInterval,validationQuery,validationTimeout。这是我的数据源配置:
validationInterval
validationQuery
validationTimeout
<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="username" value="${dbUser}" /> <property name="password" value="${dbPass}" /> <property name="url" value="${dbUrl}" /> <property name="defaultAutoCommit" value="false" /> <property name="defaultTransactionIsolation"> <util:constant static-field="java.sql.Connection.TRANSACTION_SERIALIZABLE" /> </property> <property name="maxActive" value="300" /> <property name="maxIdle" value="25" /> <property name="initialSize" value="5" /> <property name="validationInterval" value="5000" /> <property name="validationQuery" value="SELECT 1"/> <property name="validationQueryTimeout" value="3" /> <property name="minIdle" value="5" /> <property name="initSQL" value="SET time_zone = '+00:00';" /> </bean>
我autoReconnect=true在连接URL中没有参数,只有UTF8编码。
autoReconnect=true
确切的错误是:
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 38,700,615 milliseconds ago. The last packet sent successfully to the server was 38,700,615 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. Caused by: java.net.SocketException: Broken pipe
我们的一个应用程序遇到了一些类似的问题,经过大量挖掘,我们添加了以下属性来解决我们所有的连接问题:
maxAge="180000" testOnBorrow="true" testWhileIdle="true" validationInterval="0" //forces the connection pool to validate each time a connection is given to the application