Spring quartz计划程序无法获取触发器

Spring quartz计划程序无法获取触发器,spring,jdbc,db2,websphere,quartz-scheduler,Spring,Jdbc,Db2,Websphere,Quartz Scheduler,我和一个客户一起工作,遇到一些工作不经常触发的问题 下面是一个错误示例,该错误经常发生,并导致作业无法触发 Mon, 15 May 2017 04:54:03-04:00 2017-05-15T08:54:03.0000405Z [xyz_QuartzSchedulerThread] ERROR c.v.i.c.s.s.s.QuartzMonitorImpl - Failure encountered by the Quartz Scheduler, An error occurred whil

我和一个客户一起工作,遇到一些工作不经常触发的问题

下面是一个错误示例,该错误经常发生,并导致作业无法触发

Mon, 15 May 2017 04:54:03-04:00 2017-05-15T08:54:03.0000405Z [xyz_QuartzSchedulerThread] ERROR c.v.i.c.s.s.s.QuartzMonitorImpl - Failure encountered by the Quartz Scheduler, An error occurred while scanning for the next triggers to fire.
org.quartz.JobPersistenceException: Couldn't acquire next trigger: The current transaction has been rolled back because of a deadlock or timeout.  Reason code "2".. SQLCODE=-911, SQLSTATE=40001, DRIVER=3.69.49
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.acquireNextTrigger(JobStoreSupport.java:2848) ~[quartz-2.2.1.jar:na]
    at org.quartz.impl.jdbcjobstore.JobStoreSupport$40.execute(JobStoreSupport.java:2759) ~[quartz-2.2.1.jar:na]
    at org.quartz.impl.jdbcjobstore.JobStoreSupport$40.execute(JobStoreSupport.java:2757) ~[quartz-2.2.1.jar:na]
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3787) ~[quartz-2.2.1.jar:na]
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.acquireNextTriggers(JobStoreSupport.java:2756) ~[quartz-2.2.1.jar:na]
    at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:272) ~[quartz-2.2.1.jar:na]
Caused by: com.ibm.db2.jcc.am.SqlTransactionRollbackException: The current transaction has been rolled back because of a deadlock or timeout.  Reason code "2".. SQLCODE=-911, SQLSTATE=40001, DRIVER=3.69.49
    at com.ibm.db2.jcc.am.gd.a(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.am.gd.a(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.am.gd.a(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.am.yo.c(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.t4.bb.t(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.t4.bb.l(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.t4.bb.a(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.t4.p.a(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.t4.wb.b(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.am.zo.qc(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.am.zo.b(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.am.zo.ic(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.am.zo.executeUpdate(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.pmiExecuteUpdate(WSJdbcPreparedStatement.java:1187) ~[com.ibm.ws.runtime.jar:na]
    at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeUpdate(WSJdbcPreparedStatement.java:804) ~[com.ibm.ws.runtime.jar:na]
    at org.quartz.impl.jdbcjobstore.StdJDBCDelegate.updateTriggerStateFromOtherState(StdJDBCDelegate.java:1439) ~[quartz-2.2.1.jar:na]
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.acquireNextTrigger(JobStoreSupport.java:2827) ~[quartz-2.2.1.jar:na]
    ... 5 common frames omitted
Mon, 15 May 2017 04:54:03-04:00 2017-05-15T08:54:03.0000408Z [settlementScheduler_QuartzSchedulerThread] ERROR org.quartz.core.ErrorLogger - An error occurred while scanning for the next triggers to fire.
org.quartz.JobPersistenceException: Couldn't acquire next trigger: The current transaction has been rolled back because of a deadlock or timeout.  Reason code "2".. SQLCODE=-911, SQLSTATE=40001, DRIVER=3.69.49
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.acquireNextTrigger(JobStoreSupport.java:2848) ~[quartz-2.2.1.jar:na]
    at org.quartz.impl.jdbcjobstore.JobStoreSupport$40.execute(JobStoreSupport.java:2759) ~[quartz-2.2.1.jar:na]
    at org.quartz.impl.jdbcjobstore.JobStoreSupport$40.execute(JobStoreSupport.java:2757) ~[quartz-2.2.1.jar:na]
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3787) ~[quartz-2.2.1.jar:na]
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.acquireNextTriggers(JobStoreSupport.java:2756) ~[quartz-2.2.1.jar:na]
    at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:272) ~[quartz-2.2.1.jar:na]
Caused by: com.ibm.db2.jcc.am.SqlTransactionRollbackException: The current transaction has been rolled back because of a deadlock or timeout.  Reason code "2".. SQLCODE=-911, SQLSTATE=40001, DRIVER=3.69.49
    at com.ibm.db2.jcc.am.gd.a(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.am.gd.a(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.am.gd.a(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.am.yo.c(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.t4.bb.t(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.t4.bb.l(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.t4.bb.a(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.t4.p.a(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.t4.wb.b(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.am.zo.qc(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.am.zo.b(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.am.zo.ic(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.db2.jcc.am.zo.executeUpdate(Unknown Source) ~[db2jcc.jar:na]
    at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.pmiExecuteUpdate(WSJdbcPreparedStatement.java:1187) ~[com.ibm.ws.runtime.jar:na]
    at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeUpdate(WSJdbcPreparedStatement.java:804) ~[com.ibm.ws.runtime.jar:na]
    at org.quartz.impl.jdbcjobstore.StdJDBCDelegate.updateTriggerStateFromOtherState(StdJDBCDelegate.java:1439) ~[quartz-2.2.1.jar:na]
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.acquireNextTrigger(JobStoreSupport.java:2827) ~[quartz-2.2.1.jar:na]
    ... 5 common frames omitted
环境详情

  • Db2
  • Websphere(4个jndi数据源实例)
  • 使用IBMJDK8的p系列
  • 春季版4
  • 石英版本2.2.1(群集)
  • 性质

    datasource.db2.drivercassname=com.ibm.db2.jcc.DB2Driver org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.threadPool.class=org.quartz.siml.SimpleThreadPool org.quartz.threadPool.threadCount=5 org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreCMT org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.tablePrefix=T\u QRTZ_ org.quartz.scheduler.skippdatecheck=true org.quartz.jobStore.isClustered=true org.quartz.jobStore.clusterCheckinInterval=20000 org.quartz.scheduler.instanceId=AUTO


如果有人已经面对过这个问题,并且能够对此有所了解,我将不胜感激。Quartz抱怨死锁或超时,与stacktrace类似。在我的例子中,异常消息有点误导人,因为它实际上意味着根本没有到数据库的连接

  • 确保您符合使用
    JobStoreCMT
    所需的标准,请参见:

    …在尝试调度(或非调度)作业/触发器之前,JTA事务必须正在进行中。这允许调度的“工作”成为应用程序“更大”事务的一部分

  • 请注意-只要使用
    SimpleThreadPool
    ,您的计划作业就可以在非托管线程中运行(Websphere外部)。非托管线程无权访问服务器上下文(包括数据源、jndi等)

  • 考虑使用
    JobStoreTX
    并在
    WorkManagers
    提供的托管线程内运行作业,请参阅和


您在WebSphere中检查过这个吗?您的DB2数据库似乎遇到了死锁问题。也许这可以帮助您:可能正在设置org.quartz.jobStore.txIsolationLevelSerializable=true可能会有所帮助。因为这有助于防止某些数据库在高负载和“持久”事务下发生锁定超时