Mysql не воссоединяется с JNDI Tomcat 6 - PullRequest
6 голосов
/ 03 декабря 2009

Я использую JNDI с Tomcat6 для управления подключениями Mysql, мой Catalina / domain.com / ROOT.xml имеет:

<Resource name="jdbc/db" auth="Container" type="javax.sql.DataSource"
   username="db1" password="somepass" driverClassName="com.mysql.jdbc.Driver"             
   url="jdbc:mysql://localhost:3306/db?autoReconnect=true" maxActive="15" maxIdle="3"  
   maxWait="5000" removeAbandoned="true" removeAbandonedTimeout="20" />

Я, хотя autoReconnect выполнит работу по повторному подключению к базе данных, но это не так, примерно через 8 часов бездействия мое приложение выплевывает потерянное соединение с ошибками базы данных. Есть идеи?

Спасибо, Федор

1 Ответ

14 голосов
/ 03 декабря 2009

Не использовать autoReconnect. Есть проблемы с ним и он устарел . Например, вы можете иметь событие разъединения / повторного соединения, когда поток использует соединение. Вместо этого я хотел бы, чтобы ваш пул соединений проверял соединения с testOnBorrow, прежде чем передавать их в приложение. Вот пример:

<Resource name="jdbc/db"
          auth="Container"
          type="javax.sql.DataSource"
          username="db1"
          password="somepass"
          driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/db"
          maxActive="15"
          maxIdle="3"
          maxWait="5000"
          removeAbandoned="true"
          removeAbandonedTimeout="20"
          logAbandoned="true"
          factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
          validationQuery="select 1"
          minEvictableIdleTimeMillis="3600000"
          timeBetweenEvictionRunsMillis="1800000"
          numTestsPerEvictionRun="10"
          testWhileIdle="true"
          testOnBorrow="true"
          testOnReturn="false"
          />
...