Quartz Cron表达式

Quartz Cron表达式

简介

Quartz是一个Java语言编写的开源任务调度框架,广泛应用于各种企业级应用程序中。在Quartz中,cron表达式被广泛使用,它可以用来定义任务调度的时间规则,让任务在指定的时间点或时间间隔内执行。

Cron表达式基础

cron表达式由7个子表达式组成,每个子表达式表示一个时间单位。这些时间单位按顺序分别是:秒、分钟、小时、日、月、星期、年。每个子表达式用空格分隔开。

以下是cron表达式的格式:

*    *    *    *    *    *    *
┬    ┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    │    │
│    │    │    │    │    │    └─ 年(可选,1970-2099)
│    │    │    │    │    └───── 星期(0-7)(0 或 7表示星期天)
│    │    │    │    └───────── 月(1-12)
│    │    │    └─────────── 日(1-31)
│    │    └───────────── 小时(0-23)
│    └─────────────── 分钟(0-59)
└───────────────── 秒(0-59)

表达式中的代表所有值,也就是说,对于一个子表达式,如果用来表示,那么它包含该时间单位内的所有值。比如,如果用*来表示小时,那么它就包含从0到23的所有小时。

除了*,还有些特殊字符,如:

  • ?:只用于日和星期中的一个字段上,表示不指定值。如果?用于星期字段上,那么它等价于5表示星期五。
  • -:用于表示一个范围。比如,1-3表示从1到3的三个数。
  • ,:用于表示指定值。比如,1,3,5表示1、3、5这三个值。
  • /:用于表示指定时间间隔。比如,2/5表示从第2个时间单位开始,每隔5个时间单位执行一次。比如,小时字段中的2/5表示从2小时开始,每5小时执行一次。

Cron表达式示例

下面是一些常用的cron表达式:

  • 每秒钟执行一次:
* * * * * ? *
  • 每分钟的第30秒执行一次:
30 * * * * ? *
  • 每小时的第1分30秒执行一次:
30 1 * * * ? *
  • 每天的14点整执行一次:
0 0 14 * * ? *
  • 每月的第1天的14点整执行一次:
0 0 14 1 * ? *
  • 每月最后一天的14点整执行一次:
0 0 14 L * ? *
  • 每周一的14点整执行一次:
0 0 14 ? * MON *
  • 每周一至周五的14点30分执行一次:
0 30 14 ? * MON-FRI *
  • 每月的第一个星期五的14点整执行一次:
0 0 14 ? * 6#1 *

Cron表达式实现

下面是一个使用Quartz的示例代码,它使用cron表达式来配置任务的调度规则,让任务每5秒钟执行一次。需要注意的是,这个示例代码提供的类是一个独立的Java文件,它不需要使用Quartz的其它类或库。

import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.*;
importimport org.quartz.impl.StdSchedulerFactory;

public class QuartzTest {
    public static void main(String[] args) throws SchedulerException {
        // 创建一个JobDetail实例,指定任务名称、任务组名称和任务类
        JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
                .withIdentity("myJob", "myJobGroup")
                .build();

        // 创建一个Cron表达式实例,指定执行规则
        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ?");

        // 创建一个Trigger实例,指定触发器名称、触发器组名称和执行规则
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("myTrigger", "myTriggerGroup")
                .withSchedule(cronScheduleBuilder)
                .build();

        // 创建Scheduler实例,用于管理Job和Trigger
        Scheduler scheduler = new StdSchedulerFactory().getScheduler();

        // 将Job和Trigger注册到Scheduler中
        scheduler.scheduleJob(jobDetail, trigger);

        // 启动Scheduler
        scheduler.start();
    }

    public static class MyJob implements Job {
        @Override
        public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            System.out.println(sdf.format(new Date()) + " 执行了Quartz定时任务");
        }
    }
}

在这个示例代码中,我们创建了一个JobDetail和一个Trigger,并将它们注册到Scheduler中。其中,JobDetail指定了任务名称、任务组名称和任务类;Trigger指定了触发器名称、触发器组名称和执行规则。注意,这个示例代码使用了withIdentity()方法来指定Job和Trigger的名称和组别,这将用于Scheduler中的任务调度管理。

最后,我们创建了一个MyJob类,它实现了Quartz的Job接口,并在execute()方法中编写了任务的具体逻辑。这个任务将在指定的规则下执行。

结论

通过本文的介绍,我们了解了Quartz cron表达式的基础知识以及常用的几个示例。此外,我们也介绍了Quartz如何使用cron表达式来配置任务调度规则,并在示例代码中展示了Quartz的使用方法。通过学习本文的知识,在实际项目中,我们可以轻松使用Quartz框架提供的定时任务功能,实现各种任务的按时执行。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程