Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在数据库连接失败时重试Quartz计划程序启动_Java_Quartz Scheduler_Quartz - Fatal编程技术网

Java 在数据库连接失败时重试Quartz计划程序启动

Java 在数据库连接失败时重试Quartz计划程序启动,java,quartz-scheduler,quartz,Java,Quartz Scheduler,Quartz,我们有一个Java应用程序,它使用Quartz来调度作业。我们使用的石英版本是:石英-2.2.1 quartz配置使用JDBC作业存储 如果在调用quartz scheduler对象上的start方法时数据库连接已断开(由于间歇性网络故障),则会出现以下异常: 2017-05-28 00:05:45 org.quartz.SchedulerConfigException: Failure occured during job recovery. [See nested exception: or

我们有一个Java应用程序,它使用Quartz来调度作业。我们使用的石英版本是:石英-2.2.1

quartz配置使用JDBC作业存储

如果在调用quartz scheduler对象上的start方法时数据库连接已断开(由于间歇性网络故障),则会出现以下异常:

2017-05-28 00:05:45 org.quartz.SchedulerConfigException: Failure occured during job recovery. [See nested exception: org.quartz.JobPersistenceException: Couldn't recover jobs: The connection is closed. [See nested exception: com.microsoft.sqlserver.jdbc.SQLServerException: The connection is closed.]]
2017-05-28 00:05:45     at org.quartz.impl.jdbcjobstore.JobStoreSupport.schedulerStarted(JobStoreSupport.java:692)
2017-05-28 00:05:45     at org.quartz.core.QuartzScheduler.start(QuartzScheduler.java:567)
2017-05-28 00:05:45     at org.quartz.impl.StdScheduler.start(StdScheduler.java:142)
为了确保quartz scheduler成功启动,我们在代码中添加了retry,每1秒对quartz scheduler对象调用一次start方法。但是,当数据库连接启动时,对quartz scheduler start方法的调用是成功的(它不会引发任何异常)-但是驻留在数据库中的关联触发器不会启动,也不会触发任何作业

你知道这里有什么问题吗?任何帮助都将不胜感激

这是quartz配置,请注意,我们已经启用了验证查询来处理糟糕的连接(由于间歇性网络故障)


你可能对我有意见

TL;DR:在构建触发器时使用适当的缺火说明,或增加
缺火阈值


如果计划程序在触发器触发时关闭,则为缺火。一旦调度程序启动,Quartz将检查是否有误触发的作业,并查找有关如何处理这些作业的说明。立即运行它们?等到他们下一个预定的开火时间? 要让它知道该做什么,您可以使用显式,也可以默认Quartz的智能策略,这取决于触发器类型(例如,
CronTrigger
具有与
SimpleTrigger
不同的默认缺火策略)

遗憾的是,Quartz的食谱在解释失火指令方面有点欠缺,它告诉您,如果您想了解更多信息,请检查JavaDoc中的每个
Trigger
子类。
为了方便你,这个家伙写了一篇博客

您没有告诉我们您正在使用什么类型的触发器,但您可能希望包括失火指令,例如,一旦调度程序启动,它将立即运行您的作业


另一个选项是
org.quartz.jobStore.misfiresthrown
设置为高于调度程序启动所需的值。
现在你把它设置为1分钟。这意味着,任何比预期点火时间晚1分钟以内点火的作业都不会被视为失火,并且运行正常。然而,对于迟到超过1分钟的工作,Quartz将为他们检查缺火政策


假设您知道调度程序总是在5分钟内上线;然后,您可以尝试设置
org.quartz.jobStore.misfirestreshold=300000
,这样当调度程序启动时作业启动时,quartz会发现它们迟到了不到5分钟,只会让它们执行,而不先检查缺火策略。

嗨,Aman,您发布此问题,我回答它已经快两个月了。如果您觉得我的答案有帮助,请您将其标记为已接受(投票箭头下的复选框)。谢谢
#============================================================================
# Configure Main Scheduler Properties  
#============================================================================

org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.skipUpdateCheck=true

#============================================================================
# Configure ThreadPool  
#============================================================================

org.quartz.threadPool.class =     org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount =  50
org.quartz.threadPool.threadPriority = 5

#============================================================================
# Configure JobStore  
#============================================================================

org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.maxMisfiresToHandleAtATime = 15

org.quartz.jobStore.class =     org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass =     org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.dataSource = aBPM
org.quartz.jobStore.tablePrefix = ABPM_
org.quartz.jobStore.isClustered = false
org.quartz.jobStore.useDBLocks = false
org.quartz.jobStore.acquireTriggersWithinLock = true

#============================================================================
# Configure Datasources  
#============================================================================
org.quartz.dataSource.aBPM.driver = org.hsqldb.jdbcDriver
org.quartz.dataSource.aBPM.URL = jdbc:hsqldb:file:embeddedDb/db/abpmquartz
org.quartz.dataSource.aBPM.user = sa
org.quartz.dataSource.aBPM.encryptPassword = yes
org.quartz.dataSource.aBPM.password = fMFVvEFk3gFmM9ewWQkTNg==
org.quartz.dataSource.aBPM.maxConnections = 55
org.quartz.dataSource.aBPM.validationQuery= SELECT 1