首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Quartz中运行丢失的作业?

如何在Quartz中运行丢失的作业?
EN

Stack Overflow用户
提问于 2015-04-15 22:37:00
回答 1查看 1K关注 0票数 2

我有每天的cron作业,它应该在00:00在所有时区运行,但随后应用程序处于维护状态(可能需要一两个小时),计划作业的一部分丢失。

是否可以运行维护期间遗漏的任务?

我已经用下面的参数配置了Quartz (/grails-app/conf/quartz.properties):

代码语言:javascript
复制
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

我在触发器(grails quartz plugin)中添加了MISFIRE_INSTRUCTION_FIRE_ONCE_NOW选项:

代码语言:javascript
复制
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) {
        // ...
    }
}

但是什么都没有改变,错过的作业仍然不能运行。

在Quartz shoutdown之前(从qrtz_triggers记录):

代码语言:javascript
复制
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

Quartz启动后:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2015-04-15 22:45:31

您的触发器是否使用了"MISFIRE_INSTRUCTION_FIRE_ONCE_NOW“选项?很可能,如果您使用的是CronTrigger,这就是您想要的选项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29653182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档