当前位置: 首页 > 知识库问答 >
问题:

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

古畅
2023-03-14

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

是否可以运行在维护期间错过的任务?

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
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记录):

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

共有1个答案

钱焕
2023-03-14

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

 类似资料:
  • 我正在使用Java中的Quartz调度程序来运行cron作业。这是我第一次使用这个框架运行cron作业,所以我有些困惑。 我跟随本教程是为了更好地理解如何使用Quartz框架。 如果JobA每周运行,那么它应该打印出和。但是如果JobA每个月都在运行,那么它应该打印出和所以下一个问题是--有没有什么方法,我们可以在运行JobA时向它传递参数?

  • 问题内容: 如何检查计划的Quartz Cron作业是否正在运行?是否有任何API可以进行检查? 问题答案: scheduler.getCurrentlyExecutingJobs()在大多数情况下应该可以工作。但是请记住不要在Job类中使用它,因为它使用ExecutingJobsManager(a JobListener)将正在运行的作业放到HashMap中,该HashMap在作业类之前运行,因

  • 如何检查计划的Quartz cron作业是否正在运行?是否有API进行检查?

  • 如果一段时间后出现故障,是否有办法自动重新运行作业(例如:当连接失败时,在10分钟后重试一次)?我搜索了互联网,但我确实找到了任何结构化的解决方案,我真的被这个问题困住了。 这在塔伦德是可以实现的吗?如果是,要使用的组件是什么,以什么顺序?提前谢谢你。

  • 可以使用普罗米修斯跟踪容器的内存和cpu资源。但我们可以跟踪容器的I/O吗?有度量单位吗?

  • 问题内容: 我对Quartz有点陌生。有没有一种方法可以更新已经提交的Quartz作业的作业执行间隔?这个间隔会立即更新吗?重新安排工作后,您是否必须再次开始工作? 我找到了以下链接,但由于我的石英罐不包含该链接中使用的某些类,因此我不知道代码所引用的库。另外,triggerKey方法从何而来?这是静态导入吗? http://www.quartz- scheduler.org/documentat