java 数据库连接池配置问题
问题描述:在Java中使用连接池链接mysql数据库, 有时候会遇到 The last packet successfully received from the server was *** milliseconds ago.
问题分析:
解决办法:
1. add ?autoReconnect=true to our jdbc URL, like jdbc:mysql://:3306/?autoReconnect=true
2. add below configuration condition to jndi file (使用JNDI的方式配置 Jboss).
<validation>
<check-valid-connection-sql>/*ping*/</check-valid-connection-sql>
<background-validation>true</background-validation>
<background-validation-millis>5000</background-validation-millis>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
</validation>
<datasource jta="true" jndi-name="java:jboss/datasources/OCIRISEmailDB" pool-name="OCIRISEmailDBPool" enabled="true" use-ccm="true">
<connection-url>[url]?autoReconnect=true</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<driver>mysql</driver>
<pool>
<min-pool-size>5</min-pool-size>
<max-pool-size>25</max-pool-size>
<prefill>true</prefill>
<use-strict-min>true</use-strict-min>
<flush-strategy>IdleConnections</flush-strategy>
</pool>
<security>
<user-name>intake</user-name>
<password>oayQUa8FMoFl</password>
</security>
<validation>
<check-valid-connection-sql>/*ping*/</check-valid-connection-sql>
<background-validation>true</background-validation>
<background-validation-millis>5000</background-validation-millis>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
</validation>
<timeout>
<set-tx-query-timeout>false</set-tx-query-timeout>
<blocking-timeout-millis>0</blocking-timeout-millis>
<idle-timeout-minutes>2</idle-timeout-minutes>
<query-timeout>0</query-timeout>
<use-try-lock>0</use-try-lock>
<allocation-retry>0</allocation-retry>
<allocation-retry-wait-millis>0</allocation-retry-wait-millis>
</timeout>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</datasource>