我正在尝试创建一个作业,该作业使用输入到触发器调度程序的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();
}
答案 0 :(得分:1)
尝试设置 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
类中。
答案 1 :(得分:1)
大多数情况下,数据库中有一个具有相同名称的作业,该作业必须由集群的另一个成员来更新。
您可以尝试重命名作业(jobkey),或者检查数据库是否未被其他人使用。
尽管如此,作业在启动时会更新其配置。
答案 2 :(得分:0)
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,您可以在其中输入表达式,并输出结果。
答案 3 :(得分:0)
我确实有相同的问题,原因不同,这就是为什么要发布此问题。我已经使用定制表定制了QUARTZ模式。例如,JOB_DETAILS,TRIGGERS和CRON_TRIGGERS是实际表。我创建了每个表都带有QRTZ_前缀的表。
启动应用程序时,作业将被注册,触发器将被注册,并且记录按预期存在于表中。但是,在下一个CRON时间间隔中不会发生作业触发。那么,我犯的错误是什么?
JOB_DETAILS和TRIGGERS之间存在关系,而TRIGGERS与CRON_TRIGGERS等之间存在关系。我错过了在这些表之间指定FOREIGN KEY关系的方法。