2009-12-03 3 views
6

J'utilise JNDI Tomcat6 pour gérer les connexions Mysql, mon Catalina/domain.com/ROOT.xml a:Mysql pas reprendre contact avec JNDI Tomcat 6

<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" /> 

Je croyais que autoreconnect va faire le travail à la base de données reconnectant mais ce n'est pas le cas, après environ 8 heures d'inactivité, mon application crache la connexion perdue aux erreurs de base de données. Des idées?

Merci, Fedor

Répondre

14

N'utilisez autoReconnect. Il y a des problèmes avec cela et it's been deprecated. Par exemple, un événement de déconnexion/reconnexion peut se produire lorsqu'un thread utilise la connexion. Je voudrais plutôt avoir vos connexions de test du pool de connexion avec testOnBorrow avant de les transmettre à l'application. Voici un exemple:

<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" 
      /> 
+1

merci qui fonctionnera – Fedor

+1

Il convient de mentionner que Tomcat, vous pouvez utiliser le validationQuery plus léger et efficace «/* ping \ */». Voir: http://dev.mysql.com/doc/connector-j/en/connector-j-usagenotes-tomcat.html – Jon