一、cron表達式概述
cron表達式是一種用來配置計劃任務的字符串表達式,由6個字段組成,每個字段描述了計劃任務中的一個時間段,分別表示分鐘、小時、日、月、周、年。一個cron表達式的格式如下:
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ │
│ │ │ │ │ └ year (optional)
│ │ │ │ └───── day of week (0 - 6) (Sunday to Saturday)
│ │ │ └────────── month (1 - 12)
│ │ └─────────────── day of month (1 - 31)
│ └──────────────────── hour (0 - 23)
└───────────────────────── minute (0 - 59)
如上所示,cron表達式有6個字段,每個字段用空格來分隔。每個字段都有它自己的符號來表示它所代表的時間段,由於cron表達式中允許使用的值及符號較多,因此需要對每個字段進行詳細解析。
二、cron表達式字段詳解
1.分鐘字段
分鐘字段可以設置0-59的任何值,或者使用特殊字符。特殊字符可以是:
*
: 匹配任意值,表示每分鐘都匹配,
: 分隔符,可以指定多個值,例如:1,5,10表示在第1、5、10分鐘執行-
: 範圍符,可以指定一個範圍內的值,例如:5-15表示在第5到15分鐘之間執行/
: 步長符,可以指定一個初始值,後面每隔一定時間執行一次,例如:0/15表示從0分鐘開始,每隔15分鐘執行一次
例如:*/5 * * * * *
表示在每5分鐘時執行一次任務。
2.小時字段
小時字段可以設置0-23的任何值,也可以使用特殊字符。特殊字符有和分鐘字段一樣的4種,用法也相同。例如:0 1-5 * * * *
表示在早上1到5點之間每分鐘執行一次任務。
3.日字段
日字段可以設置1-31的任何值,也可以使用特殊字符。特殊字符有:*
、,
、-
、/
和 ?
,其中?
表示不指定,只能在日和周字段中使用。例如:0 0 10 1-15 * *
表示在每個月的1-15日的10點執行任務。
4.月字段
月字段可以設置1-12的任何值,也可以使用特殊字符。特殊字符有:*
、,
、-
、/
以及 JAN-DEC
十二個英文單詞。例如:0 0 0 1 JAN,FEB,MAR * *
表示在每年的1月、2月、3月第一天的0點0分執行任務。
5.周字段
周字段可以設置0-7(0和7表示周日),可以使用0或7,也可以使用特殊字符。特殊字符有:*
、,
、-
、/
、L
、#
以及 MON-SUN
七個英文單詞。例如:0 0 0 * * 1-5
表示在周一到周五的0點0分執行任務。
6.年字段
年字段可以設置1970年到2099年的任何值,可以使用4位數字表示年,也可以使用特殊字符。特殊字符有:*
、,
、-
、/
,例如:0 0 0 1 1 *
表示每年1月1日0點0分執行任務。
三、cron表達式的Java實現
在Java中,可以使用Quartz框架來處理cron表達式,主要涉及到兩個類:
CronTriggerImpl
:用於配置和管理計劃任務的觸發條件,其中包括cron表達式等信息;SimpleTriggerImpl
:用於在特定的時間觸發任務。
以下是一個示例,其中定義了一個在每天12:30執行的任務:
public class CronTriggerExample {
public static void main(String[] args) {
JobDetail jobDetail = newJob(MyJob.class).withIdentity("myJob").build();
CronTrigger cronTrigger = newTrigger().withIdentity("myCronTrigger")
.withSchedule(cronSchedule("0 30 12 * * ?"))
.build();
StdSchedulerFactory factory = new StdSchedulerFactory();
try {
Scheduler scheduler = factory.getScheduler();
scheduler.scheduleJob(jobDetail, cronTrigger);
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
其中MyJob
類是需要執行的任務類,需要實現Job
接口:
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("Hello, world!");
}
}
這段代碼實現了在每天12:30執行任務MyJob
,使用StdSchedulerFactory
獲取一個scheduler實例,然後將jobDetail和cronTrigger進行關聯後啟動。
四、總結
cron表達式是一種用來配置計劃任務的字符串表達式,由6個字段組成,每個字段描述了計劃任務中的一個時間段。在Java中可以使用Quartz框架來處理cron表達式,使用CronTriggerImpl
和SimpleTriggerImpl
兩個類來配置和管理任務的觸發條件。
原創文章,作者:YZIMX,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/333437.html