Я использую tomcat 7 и пул соединений tomcat jdbc для раздачи соединений mysql.
В ночное время у нас нет активности, поэтому все соединения простаивают дольше 8 часов и сбрасываются mysql. (mysql's wait_timeout default).
Мы используем следующую конфигурацию пула:
<Resource name="jdbc/dbName"
auth="Container"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
type="javax.sql.DataSource"
maxActive="50"
maxIdle="30"
maxWait="5000"
driverClassName="com.mysql.jdbc.Driver"
validationQuery="SELECT 1"
testOnBorrow="true"
testWhileIdle="true"
timeBetweenEvictionRunsMillis="10000"
removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="true"
username="xxx"
password="xxx"
url="jdbc:mysql://host:3306/xxx"/>
Я ожидал, что EvictionPolicy удалит незанятые соединения еще до того, как MySql их закроет. Каким-то образом через один день мы получаем следующее исключение:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: после закрытия соединения операции запрещены. Драйвер неявно закрыл соединение.
Полагаю, эта проблема должна решаться пулом соединений jdbc, но есть много свойств конфигурации, и я раньше не использовал этот пул. У кого-нибудь есть хороший набор свойств для настройки пула, чтобы он не выводил закрытые соединения?
С уважением,
Альберт