连接池配置:Tomcat jndi,SSL和MySQLNonTransientConnectionException

时间:2013-11-26 15:22:59

标签: mysql ssl tomcat7 jndi connection-pooling

我正在通过JNDI资源使用tomcat连接池。

为避免连接在长时间不活动(超过8小时,即MySQL变量wait_timeout的默认值)后丢失,我已将validationQuerytestOnBorrow放入context.xml

我的context.xml是:

<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
          removeAbandoned="true" removeAbandonedTimeout="60"
          maxActive="30" maxIdle="30" maxWait="10000"
          username="myuser" password="mypwd" driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/mydb?useEncoding=true&amp;characterEncoding=UTF-8"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" closeMethod="close" 
          validationQuery="select 1" testOnBorrow="true" /> 

它可以工作,但是如果我使用SSL连接,它就不再起作用了。

我获得:

 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No 
 operations allowed after connection closed.
 ...
 Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet 
 successfully received from the server was 328,606,914 milliseconds ago.  The last 
 packet sent successfully to the server was 328,606,914 milliseconds ago. is longer 
 than the server configured value of 'wait_timeout'. You should consider either 
 expiring and/or testing connection validity before use in your application, 
 increasing the server configured values for client timeouts, or using the 
 Connector/J connection property 'autoReconnect=true' to avoid this problem.

我不会使用autoreconnect=true,因为MySQL team itself不建议

可能是什么问题?为什么SSL和无SSL之间存在这种差异?

修改

似乎通过将ssl = true放在与db:

连接的查询字符串中
  url="jdbc:mysql://localhost:3306/mydb?useEncoding=true&amp;characterEncoding=UTF-8&amp;ssl=true"

0 个答案:

没有答案