Java定时任务cron表达式

Java定时任务cron表达式

Java开发中经常会使用到定时任务,而cron表达式则是使用比较广泛的一种方式。cron表达式是一个字符串,用于定义计划任务的执行时间。在这篇文章中,我们将深入解析Java中的cron表达式,并且提供一些实例代码来帮助你更好的理解。

cron表达式基础

cron表达式由6个部分组成,每个部分使用空格进行分隔。这6个部分依次为:

序号 字段 允许的值 允许的特殊字符
1 0-59 , – * /
2 0-59 , – * /
3 小时 0-23 , – * /
4 1-31 , – * ? / L W C
5 1-12或JAN-DEC , – * /
6 1-7或SUN-SAT , – * ? / L C #

其中,第4个字段和第6个字段之间只能有一个是?或者L。

下面我们来深入解析每个字段:

1. 秒(Seconds)

用于规定分钟的哪几秒执行任务,允许通配符。

  • *:所有秒数。
  • ,:用于枚举多个时间(例如,1,3,5)。
  • -:用于指定一个范围(例如,1-10)。
  • /:用于规定时间间隔(例如,在5秒到30秒之间每隔3秒执行一次任务)。

例如,0/5就表示从0秒开始,每5秒执行一次任务。

2. 分钟(Minutes)

用于规定哪几分执行任务,允许通配符。

  • *:所有分钟。
  • ,:用于枚举多个时间(例如,1,3,5)。
  • -:用于指定一个范围(例如,1-10)。
  • /:用于规定时间间隔(例如,在5分钟到30分钟之间每隔3分钟执行一次任务)。

例如,0/5就表示从0分开始,每5分钟执行一次任务。

3. 小时(Hours)

用于规定哪几小时执行任务,允许通配符。

  • *:所有小时。
  • ,:用于枚举多个时间(例如,1,3,5)。
  • -:用于指定一个范围(例如,1-10)。
  • /:用于规定时间间隔(例如,在5小时到30小时之间每隔3小时执行一次任务)。

例如,0/5就表示从0小时开始,每5小时执行一次任务。

4. 日(Day)

用于规定哪几号执行任务,允许一些特殊字符。

  • *:所有日子。
  • ?:不指定具体的日子,用于日和周冲突的情况下。
  • ,:用于枚举多个时间(例如,1,3,5)。
  • -:用于指定一个范围(例如,1-10)。
  • /:用于规定时间间隔(例如,在5天到30天之间每隔3天执行一次任务)。
  • L:用于指定月份的最后一天(例如,1L表示1月份最后一天)。
  • W:用于指定有效工作日(距离给定日期最近的工作日,例如15W)。
  • #:用于指定该月的第几个星期几(例如2#1表示第二个星期一)。

需要注意一下,当日和周两个字段都指定了某个值,如果日和周的指定值不一致,那么任务就不会被执行。例如,当指定日为5号,周为星期六时,任务在5号星期六才会被执行。

5. 月(Month)

用于规定哪几个月执行任务,允许通配符。

  • *:所有月份。
  • ,:用于枚举多个时间(例如,1,3,5)。
  • -:用于指定一个范围(例如,1-10)。
  • /:用于规定时间间隔(例如,在5月到10月之间每隔3个月执行一次任务)。
  • JAN-DEC:用于指定具体的月份,可以使用月份的小写字母缩写(例如,JAN表示1月)。

6. 周(Day of Week)

用于规定星期几执行任务,允许一些特殊字符。

  • *:所有周几。
  • ?:不指定具体的周几,用于日和周冲突的情况下。
  • ,:用于枚举多个时间(例如,1,3,5)。
  • -:用于指定一个范围(例如,1-6,表示周一到周六)。
  • /:用于规定时间间隔(例如,在周一到周五之间每隔2天执行一次任务)。
  • L:用于指定该月的最后一个工作日,例如15L表示该月的倒数第一个工作日)。
  • #:用于指定该月的第几个星期几(例如2#1表示第二个星期一)。

需要注意一下,当日和周两个字段都指定了某个值,如果日和周的指定值不一致,那么任务就不会被执行。例如,当指定日为5号,周为星期六时,任务在5号星期六才会被执行。

示例代码

下面我们来看一些示例代码,让大家更好的理解cron表达式的使用。

示例一

使用cron表达式每隔5秒执行任务,代码如下:

import java.util.Timer;
import java.util.TimerTask;
import org.quartz.CronExpression;

public class Main {
    public static void main(String[] args) throws Exception {
        //创建定时器
        Timer timer = new Timer();
        //创建定时任务
        TimerTask task = new TimerTask(){
            public void run(){
                System.out.println("task is running...");
            }
        };
        //创建cron表达式
        CronExpression expression = new CronExpression("0/5 * * * * ?");
        //启动定时任务
        timer.schedule(task, 0, 1000);
    }
}

示例二

使用cron表达式在每周一的10点执行任务,代码如下:

import java.util.Timer;
import java.util.TimerTask;
import org.quartz.CronExpression;

public class Main {
    public static void main(String[] args) throws Exception {
        //创建定时器
        Timer timer = new Timer();
        //创建定时任务
        TimerTask task = new TimerTask(){
            public void run(){
                System.out.println("task is running...");
            }
        };
        //创建cron表达式
        CronExpression expression = new CronExpression("0 0 10 ? * MON");
        //启动定时任务
        timer.schedule(task, 0, 1000);
    }
}

结论

cron表达式是一种非常常见的定时任务调度方式,在 Java 中使用非常广泛。掌握 cron 的基本格式和语法,以及各个字段的含义,可以帮助我们更好地使用定时任务。在具体的应用场景中,我们可以根据需要来编写不同的 cron 表达式,以便更好地满足实际的需求。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程