2009-12-03 35 views
6

Tôi đang sử dụng JNDI với Tomcat6 để quản lý các kết nối Mysql, tôi Catalina/domain.com/ROOT.xml có:Mysql không kết nối lại với 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" /> 

tôi mặc dù autoReconnect sẽ làm công việc kết nối lại với cơ sở dữ liệu nhưng nó không, sau khoảng 8 giờ không hoạt động ứng dụng của tôi spits ra kết nối bị mất đến lỗi cơ sở dữ liệu. Bất kỳ ý tưởng?

Cảm ơn, Fedor

Trả lời

14

Dont sử dụng autoReconnect. Có vấn đề với nó và it's been deprecated. Ví dụ: bạn có thể có sự kiện ngắt kết nối/kết nối lại xảy ra trong khi chuỗi đang sử dụng kết nối. Thay vào đó, tôi sẽ có các kết nối kiểm tra kết nối của bạn với testOnBorrow trước khi chuyển chúng đến ứng dụng. Dưới đây là ví dụ:

<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

cảm ơn bạn rằng sẽ hoạt động – Fedor

+1

Cần phải đề cập rằng với Tomcat, bạn có thể sử dụng xác thực hợp lệ hơn và hiệu quả hơn "/ * ping \ * /". Xem: http://dev.mysql.com/doc/connector-j/en/connector-j-usagenotes-tomcat.html – Jon

Các vấn đề liên quan