gpt4 book ai didi

mysql - notifyJobStoreJobComplete 方法中的 Quartz 失败

转载 作者:行者123 更新时间:2023-11-29 03:44:02 24 4
gpt4 key购买 nike

场景:

  1. 我们有一个使用 JDBC Job Store 的调度程序。 Quartz 版本为 2.1.2。
  2. 正在调度的作业也在更新数据库。
  3. 数据库对于 quartz 和作业本身都是相同的,并且托管在 MySQL 服务器中。应用表和 quartz 表都存储在同一个数据库中。
  4. 应用程序和 quartz 的连接池不同。在应用程序中,我们使用 spring 作为连接池,而 quartz 被迫通过 quartz.properties 使用连接池。这是 quartz.properties 的片段

    org.quartz.dataSource.qzDS.driver = com.mysql.jdbc.Driver
    org.quartz.dataSource.qzDS.URL = jdbc:mysql://localhost:3306/dbname?autoReconnect=true
    org.quartz.dataSource.qzDS.user = dbuser
    org.quartz.dataSource.qzDS.password =dbpassword
    org.quartz.dataSource.qzDS.maxConnections = 30
    org.quartz.datasource.qzDS.validationQuery = select 1
    #org.quartz.datasource.qzDS.minEvictableIdleTimeMillis=21600000
    #org.quartz.datasource.qzDS.timeBetweenEvictionRunsMillis=1800000
    #org.quartz.datasource.qzDS.numTestsPerEviction=-1
    #org.quartz.datasource.qzDS.testWhileIdle=true
    org.quartz.datasource.qzDS.debugUnreturnedConnectionStackTraces=true
    org.quartz.datasource.qzDS.unreturnedConnectionTimeout=120
    org.quartz.datasource.qzDS.initialPoolSize=5
    org.quartz.datasource.qzDS.minPoolSize=5
    org.quartz.datasource.qzDS.maxPoolSize=30
    org.quartz.datasource.qzDS.acquireIncrement=5
    org.quartz.datasource.qzDS.maxIdleTime=120
    org.quartz.datasource.qzDS.validateOnCheckout=true
  5. 数据库在两台服务器上通过 MASTER-MASTER 复制集群,它们通过应用程序和 quartz 中各处的虚拟 IP 使用。

  6. 调度程序,即 quartz 也集群在集群 MySQL 的同一两台机器上。

问题:

其中一台服务器(直到现在我们遇到了备份服务器机器的问题)在调用 notifyJobStoreJobComplete 方法时偶尔会抛出数据库连接错误。这导致即使作业本身已成功完成但 quartz 无法更新其状态,作业仍会保持 BLOCKED 状态。

问题:

  1. 问题的原因可能是什么?
  2. 如何将 BLOCKED 作业移至 WAITING 状态,以便作业至少可以在下一个预定时间运行。直接编辑 QRTZ_SIMPLE_TRIGGERS 表不是一个好的解决方案,即使它可行。

编辑:提出问题。

最佳答案

notifyJobStoreJobComplete 期间的错误是:org.quartz.impl.jdbcjobstore.JobStoreTX - 无法覆盖连接自动提交/事务隔离。[java] com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:从服务器成功接收到的最后一个数据包是 619,082,686 毫秒前。最后一个成功发送到服务器的数据包是在 619,082,686 毫秒之前。比服务器配置的“wait_timeout”值长。在您的应用程序中使用之前,您应该考虑过期和/或测试连接有效性,增加服务器配置的客户端超时值,或使用 Connector/J 连接属性“autoReconnect=true”来避免此问题。

关于mysql - notifyJobStoreJobComplete 方法中的 Quartz 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9094578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com