1
我有每日cron工作,应该在00:00在所有时区运行,但随后应用程序处于维护状态(可能是一两个小时),计划作业的一部分会丢失。如何在Quartz中运行错过的作业?
是否可以运行在维护期间错过的任务?
我已经配置石英下面的参数(/grails-app/conf/quartz.properties
):
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.tablePrefix = qrtz_
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.isClustered = false
org.quartz.jobStore.dataSource = quartzDS
org.quartz.dataSource.quartzDS.driver = org.postgresql.Driver
org.quartz.dataSource.quartzDS.URL = jdbc:postgresql://localhost:5432/database
org.quartz.dataSource.quartzDS.user = username
org.quartz.dataSource.quartzDS.maxConnections = 20
org.quartz.jdbcStore = true
我添加MISFIRE_INSTRUCTION_FIRE_ONCE_NOW
选项来触发(grails quartz plugin):
class DailyReportJob {
static triggers = {
DateTimeZone.availableIDs.each { tzID ->
cron([
name: tzID,
cronExpression: '0 1 0 * * ?',
timeZone: TimeZone.getTimeZone((String)tzID),
misfireInstruction: CronTrigger.MISFIRE_INSTRUCTION_FIRE_ONCE_NOW
])
}
}
def execute(context) {
// ...
}
}
但是没有什么变化,错过了工作仍然无法运行。
石英shoutdown前(从qrtz_triggers
记录):
sched_name | quartzScheduler
trigger_name | America/Yakutat
trigger_group | GRAILS_TRIGGERS
job_name | myapp.jobs.DailyReportJob
job_group | GRAILS_JOBS
description |
next_fire_time | 1429171260000
prev_fire_time | -1
priority | 5
trigger_state | WAITING
trigger_type | CRON
start_time | 1429170209000
end_time | 0
calendar_name |
misfire_instr | 1
job_data | \x
石英后开始:
sched_name | quartzScheduler
trigger_name | America/Yakutat
trigger_group | GRAILS_TRIGGERS
job_name | myapp.jobs.DailyReportJob
job_group | GRAILS_JOBS
description |
next_fire_time | 1429257660000
prev_fire_time | -1
priority | 5
trigger_state | WAITING
trigger_type | CRON
start_time | 1429171539000
end_time | 0
calendar_name |
misfire_instr | 1
job_data | \x
我发现奇怪的行为:在检查哪些任务错过之前,石英(也许石英插件)从数据库中删除所有记录并添加新的。 – AndreyT
是的,它的bug是https://grails.org/plugin/quartz – AndreyT
所以我报告bug到 jira:https://jira.grails.org/browse/GPQUARTZ-144 – AndreyT