一、Cron表达式每天9点执行
在Cron表达式中,每个字段都可以使用一个星号代替。星号代表所有合法的值。比如,分钟字段为*,代表每分钟都执行任务。
在这个例子中,我们需要每天9点进行任务调度。因此,在小时字段中填写9,其余字段使用星号。Cron表达式为:
0 0 9 * * ?
上面的表达式中,第一和第二个字段表示零秒和零分。第三个字段代表小时,使用9。星号代表不限制日期和月份。最后一个问号是用于修饰日子和周几字段之间的冲突关系。
二、Cron表达式每3秒执行一次
要在Cron表达式中指定某个字段的固定间隔,我们可以使用斜杠(/)操作符。该操作符可以用于一些范围的值,代表这个范围内每隔n步执行一次任务。
在这个例子中,我们需要每3秒执行一次任务。因此,我们在秒字段中使用/3。其他字段使用星号。Cron表达式为:
*/3 * * * * ?
三、Cron表达式每天执行两次
如果需要在一天内指定执行两次任务,我们可以使用逗号(,)操作符分隔多个时间点。每个时间点使用Cron表达式描述法规范。在这个例子中,我们需要在早上9点和下午5点分别执行任务。Cron表达式为:
0 0 9,17 * * ?
上面的表达式中,逗号操作符分隔了两个时间点,分别是早上9点和下午5点。其他字段使用星号代替,表示不限制日期和月份。
四、Cron表达式每天凌晨0点执行一次
对于每天凌晨0点执行的任务,我们可以在小时字段中使用0。其他字段使用星号,表示不限制日期和月份。Cron表达式为:
0 0 0 * * ?
五、Cron表达式每1小时执行一次
如果需要每隔1小时执行一次任务,我们可以在小时字段中使用*/1,或者直接使用0。其他字段使用星号代替。Cron表达式为:
0 0 */1 * * ? 或者 0 0 0/1 * * ?
六、Cron表达式每周一次
如果需要每周某个时间点执行一次任务,我们可以把周几字段(第六个字段)设置为固定的值。在这个例子中,我们需要每周日的上午10点执行任务。Cron表达式为:
0 0 10 ? * SUN
上面的表达式中,问号(?)可以用于修饰日子和周几字段之间的冲突关系。SUN代表周日。
七、Cron表达式每周四执行一次
同样地,如果需要在每周四的上午9点执行任务,我们可以使用以下Cron表达式:
0 0 9 ? * THU
上面的表达式中,THU代表周四。
八、Cron表达式每季度执行一次
如果需要每个季度执行一次任务,我们可以使用以下Cron表达式:
0 0 0 1 */3 ?
上面的表达式中,斜杠操作符代表每隔3个月执行一次。其他字段使用星号代替。
九、Cron语法每周运行一次
最后一个例子是每周执行一次任务的Cron表达式。这个例子是一个热门的问题,因为它看起来似乎应该使用0 0 0 * * 0或者0 0 0 * * 7这样的表达式来指定,但是这是不正确的。正解是:
0 0 * * 0 ?
上面的表达式中,第五个字段表示周几,0或者7都代表周日。
代码示例
下面是Java语言中使用Quartz框架使用Cron表达式每年执行一次的示例代码:
import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; import java.util.Date; public class AnnualJob implements Job { public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { System.out.println("This job runs annually at " + new Date()); } public static void main(String[] args) throws SchedulerException { JobDetail job = JobBuilder.newJob(AnnualJob.class) .withIdentity("job1", "group1") .build(); CronTrigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger1", "group1") .withSchedule(CronScheduleBuilder.cronSchedule("0 0 0 1 1 ?")) .build(); Scheduler scheduler = new StdSchedulerFactory().getScheduler(); scheduler.start(); scheduler.scheduleJob(job, trigger); } }
上面的代码创建了一个每年执行一次的任务,并指定了对应的Cron表达式。首先,我们定义一个AnnualJob类,实现了Quartz框架的Job接口。在execute方法中,我们输出一句话,表示任务每年执行一次。
在main方法中,我们首先创建一个JobDetail类,代表一个可执行的工作,然后创建一个CronTrigger类,代表一种可重复执行的工作。在CronScheduleBuilder类的帮助下,我们将之前的Cron表达式传递给trigger,以便对可重复执行的工作进行计划安排。
最后,我们使用StdSchedulerFactory类获取调度程序的参考,启动它并通过scheduleJob方法告诉它何时启动我们的工作。执行结果如下:
This job runs annually at Wed Jan 01 00:00:00 CST 2025 Build successful.
总结
本文总结了Cron表达式每年执行一次的几种使用方法,包括每天执行、每少秒执行、每周执行、每个季度执行等等。此外,本文还介绍了如何在Java中使用Quartz框架来执行这些Cron表达式。