为什么我的石英作业没有按照给定的cron表达式触发,而是每10分钟触发一次?

我正在尝试创建一个作业,该作业使用输入到触发器调度程序的cron表达式在每个星期六的晚上8点运行。但是我的工作每10分钟执行一次吗?我到底在这里做错了什么,请帮忙。我的应用程序设置堆栈是Spring Boot + Hibernate。代码如下。

    @Bean(name = "emailReportJobDetail")
    public JobDetail emailReportJobDetail() {
        return newJob().ofType(EmailReportJob.class).storeDurably().withIdentity(JobKey.jobKey("Qrtz_EmailReportProcessor")).withDescription("Invoke EmailReportProcessor Job service...").build();
    }

    @Bean
    public Trigger emailReportTrigger(@Qualifier("emailReportJobDetail") JobDetail job) {

        logger.info("Configuring emailReportTrigger to fire every Saturday 8 PM GMT");

        return newTrigger().forJob(job).withIdentity(TriggerKey.triggerKey("Qrtz_EmailReportProcessor")).withDescription("EmailReportProcessor trigger")
                .withSchedule(CronScheduleBuilder.cronSchedule("0 0 20 ? * SAT")
                )
                .build();
    }
jieqicheng 回答:为什么我的石英作业没有按照给定的cron表达式触发,而是每10分钟触发一次?

尝试设置 cron表达式 0 0 20 ? * 7并添加时区

return  newTrigger()
        .forJob(job)
        .withIdentity(TriggerKey.triggerKey("Qrtz_EmailReportProcessor"))
        .inTimeZone(TimeZone.getTimeZone(YOUR_TIME_ZONE))
        .withDescription("EmailReportProcessor trigger")
        .withSchedule(CronScheduleBuilder.cronSchedule("0 0 20 ? * 7"))
        .build();

尽管 cron表达式 0 0 20 ? * SAT也是正确的,请尝试此操作,并将日志保存在EmailReportJob类中。

,

大多数情况下,数据库中有一个具有相同名称的作业,该作业必须由集群的另一个成员来更新。

您可以尝试重命名作业(jobkey),或者检查数据库是否未被其他人使用。

尽管如此,作业在启动时会更新其配置。

,

Crontab格式:

# 1. Entry: Minute when the process will be started [0-60]
# 2. Entry: Hour when the process will be started [0-23]
# 3. Entry: Day of the month when the process will be started [1-28/29/30/31]
# 4. Entry: Month of the year when the process will be started [1-12]
# 5. Entry: Weekday when the process will be started [0-6] [0 is Sunday] or 
            use sun,mon,tue,wed,thu,fri,or sat
#
# all x min = */x

因此,根据此0 20 * * sat,它将在每个星期六的晚上8:00运行。

一个有用的工具是:CronTab Guru,您可以在其中输入表达式,并输出结果。

,

我确实有相同的问题,原因不同,这就是为什么要发布此问题。我已经使用定制表定制了QUARTZ模式。例如,JOB_DETAILS,TRIGGERS和CRON_TRIGGERS是实际表。我创建了每个表都带有QRTZ_前缀的表。

启动应用程序时,作业将被注册,触发器将被注册,并且记录按预期存在于表中。但是,在下一个CRON时间间隔中不会发生作业触发。那么,我犯的错误是什么?

JOB_DETAILS和TRIGGERS之间存在关系,而TRIGGERS与CRON_TRIGGERS等之间存在关系。我错过了在这些表之间指定FOREIGN KEY关系的方法。

本文链接:https://www.f2er.com/3014383.html

大家都在问