周一到周六晚上 7 点到早上 9 点执行工作,周日全天执行。
我尝试输入多个 cron 表达式,但它不起作用。谁能帮我解决这个问题?
1. " * * 19-8 ? * MON,TUE,WED,THU,FRI,SAT "
2. " * * * ? * SUN "
周一到周六晚上 7 点到早上 9 点执行工作,周日全天执行。
我尝试输入多个 cron 表达式,但它不起作用。谁能帮我解决这个问题?
1. " * * 19-8 ? * MON,TUE,WED,THU,FRI,SAT "
2. " * * * ? * SUN "
由于您使用的是Quartz,因此您可以创建几个不同的 CronTriggers,并将它们全部安排到您需要的工作中。例如(将 cron 表达式更改为您需要的表达式)
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
JobDetail job = newJob(SimpleJob.class)
.withIdentity("job1", "group1")
.build();
Set<Trigger> triggers = new HashSet<>();
CronTrigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.withSchedule(cronSchedule("0/20 * * * * ?"))
.build();
triggers.add(trigger1);
CronTrigger trigger2 = newTrigger()
.withIdentity("trigger2", "group1")
.withSchedule(cronSchedule("15 0/2 * * * ?"))
.build();
triggers.add(trigger2);
CronTrigger trigger3 = newTrigger()
.withIdentity("trigger3", "group1")
.withSchedule(cronSchedule("0 0/2 8-17 * * ?"))
.build();
triggers.add(trigger3);
scheduler.scheduleJob(job, triggers, false);
您不能使用多个 CronExpressions 创建一个触发器。
我认为看到您的要求的复杂性,我们需要创建 4 cron 表达式来完成您的任务。
// 周一晚上 7 点到 12 点的任务
==>
* 19-24 * * 1 <YOUR_TASK>
->* – every Minute
->19-24 hours
->* – Every day
->* – Every month
->1--Mon,
//周二到周五的任务 ==>
* 00-24 * * 2-5 <YOUR_TASK>
->* – 0th Minute
-> 00-24 hours
->* – Every day
->* – Every month
->1-5 -Mon, Tue, Wed, Thu , Fri, Sat
//周六上午 9 点之前的任务 ==>
* 00-09 * * 6 <YOUR_TASK>
->00 – every Minute
->00-09 – upto 9 AM
->* – Every day
->* – Every month
->6 -, Sat
//周六的任务==>
* * * * 7 <YOUR_TASK>
->* – Every minute
->00-09 – upto 9 AM
->* – Every day
->* – Every month
->6 -, Sat
cron-utils引入了多 cron 表示法:您可以将多个 cron 组合成一个表达式。下面是一个例子:
String multicron = "0 0|0|30|0 9|10|11|12 * * ? *";
parser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ));
Cron cron = parser.parse(multicron);
assertEquals(multicron, cron.asString());
cron 表示法与任何常规 cron 相同:在 cron 中保持相同值的字段保持不变。将包含不同值的字段将由管道分隔。
您的两个 crons 可以表示为:
"* * 19-8|* ? * MON,TUE,WED,THU,FRI,SAT|SUN"
目前 cron-utils 不支持作业执行,但提供了知道下一个/上一个执行日期的方法。
如果需要 nodejs,https://github.com/datasert/cronjs会执行多 cron 表达式。例如,* 21-23 * * 2,4,6|* 0-5 * * 1,3,5|* * ? * 7
免责声明 我是构建该库的团队的一员