CommunicationsException

CommunicationsException

我的MySQL连接池有一点麻烦。
就是这种情况:

通过Quartz安排了不同的作业。所有作业都连接到不同的数据库,这全天都能正常工作,而夜间计划的作业因CommunicationsException而失败...

石英作业:

Job1 runs 0 0 6,10,14,18 * * ?
Job2 runs 0 30 10,18 * * ?
Job3 runs 0 0 5 * * ?


如您所见,最后一个作业在18点运行,大约需要1个小时才能运行。
凌晨5点的第一项工作失败了。我已经在资源配置中尝试了各种参数组合,这是我现在正在运行的参数组合:

<!-- Database 1 (MySQL) -->
<Resource
 auth="Container"
 driverClassName="com.mysql.jdbc.Driver"
 maxActive="100"
 maxIdle="30"
 maxWait="10000"
 removeAbandoned="true"
 removeAbandonedTimeout="60"
 logAbandoned="true"
 type="javax.sql.DataSource"
 name="jdbc/appDbProd"
 username="****"
 password="****"
 url="jdbc:mysql://127.0.0.1:3306/appDbProd?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"
 testWhileIdle="true"
 testOnBorrow="true"
 testOnReturn="true"
 validationQuery="SELECT 1"
 timeBetweenEvictionRunsMillis="1800000"
/>

<!-- Database 2 (MySQL) -->
<Resource
 auth="Container"
 driverClassName="com.mysql.jdbc.Driver"
 maxActive="100"
 maxIdle="30"
 maxWait="10000"
 removeAbandoned="true"
 removeAbandonedTimeout="60"
 logAbandoned="true"
 type="javax.sql.DataSource"
 name="jdbc/prodDbCopy"
 username="****"
 password="****"
 url="jdbc:mysql://127.0.0.1:3306/prodDbCopy?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"
 testWhileIdle="true"
 testOnBorrow="true"
 testOnReturn="true"
 validationQuery="SELECT 1"
 timeBetweenEvictionRunsMillis="1800000"
/>
<!-- Database 3 (MSSQL)-->
<Resource
 auth="Container"
 driverClassName="net.sourceforge.jtds.jdbc.Driver"
 maxActive="30"
 maxIdle="30"
 maxWait="100"
 removeAbandoned="true"
 removeAbandonedTimeout="60"
 logAbandoned="true"
 name="jdbc/catalogDb"
 username="****"
 password="****"
 type="javax.sql.DataSource"
 url="jdbc:jtds:sqlserver://127.0.0.1:1433;databaseName=catalog;useNdTLMv2=false"
 testWhileIdle="true"
 testOnBorrow="true"
 testOnReturn="true"
 validationQuery="SELECT 1"
 timeBetweenEvictionRunsMillis="1800000"
/>


出于明显的原因,我更改了IP,用户名和密码,但是可以看到它们确实是正确的,因为该应用程序整天都可以成功运行。

最烦人的是:
首先运行的第一个作业成功查询了Database2,但是由于某种原因(CommunicationsException)无法查询Database1:


  造成原因:
  com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:
  成功接收到的最后一个数据包
  来自服务器的39,376,539
  毫秒前。最后一包
  已成功发送到服务器是
  39,376,539毫秒之前。更长
  比服务器配置的值
  'wait_timeout'。你应该考虑
  到期和/或测试
  在您使用之前的连接有效性
  应用程序,增加服务器
  客户端超时的配置值,
  或使用连接器/ J连接
  属性'autoReconnect = true'避免
  这个问题。


有任何想法吗?谢谢!

最佳答案

如前所述,在连接池上启用连接验证。

10-08 01:27