Quartz是一個徹底由java編寫的開源做業調度框架。java
經過觸發器設置做業定時運行規則、控制做業的運行時間。spring
Quartz定時器的做用不少,好比定時發送信息、定時器生成報表。框架
Scheduler – 核心調度器maven
Job – 任務ide
JobDetail – 任務描述spring-boot
Trigger -- 觸發器ui
Job是一個接口,藉口中只有一個execute()方法,具體的任務類須要實現該接口的該方法。spa
public interface Job {
void execute(JobExecutionContext context)
throws JobExecutionException;
}
使用quartz,咱們僅僅須要在maven的pom文件中添加依賴便可。我使用的是如今最新的一個版本2.3.0。3d
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
這個任務主要是每2秒打印一次HelloQuartz。orm
先實現一下這個基本的Quartz的任務再來介紹一下Quartz的3個重要組成,JobDetail,Trigger,Scheduler。
這個類是咱們具體要實現的任務(打印Hello Quartz)
package com.example;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Auther: wuyilong
* @Date: 2019/3/20 09:27
* @Description: 打印Hello Quartz
*/
public class HelloJob implements Job {
建立HelleScheduler的步驟:
建立調度工廠(); //工廠模式
根據工廠取得調度器實例(); //工廠模式
Builder模式構建子組件<Job,Trigger> // builder模式, 如JobBuilder、TriggerBuilder、DateBuilder
經過調度器組裝子組件 調度器.組裝<子組件1,子組件2...> //工廠模式
調度器.start(); //工廠模式
public class HelloScheduler {
public static void main(String[] args) throws SchedulerException {
//建立一個jobDetail的實例,將該實例與HelloJob Class綁定
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob").build();
//建立一個Trigger觸發器的實例,定義該job當即執行,而且每2秒執行一次,一直執行
SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger").startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();
//建立schedule實例
StdSchedulerFactory factory = new StdSchedulerFactory();
Scheduler scheduler = factory.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail,trigger);
}
}
名稱 | 是否必須 | 容許值 | 特殊字符 |
---|---|---|---|
秒 | 是 | 0-59 | , - * / |
分 | 是 | 0-59 | , - * / |
時 | 是 | 0-23 | , - * / |
日 | 是 | 1-31 | , - * ? / L W C |
月 | 是 | 1-12 或 JAN-DEC | , - * / |
周 | 是 | 1-7 或 SUN-SAT | , - * ? / L C # |
年 | 否 | 空 或 1970-2099 | , - * / |
表示式 | 說明 |
---|---|
0 0 12 * * ? | 天天12點運行 |
0 15 10 ? * * | 天天10:15運行 |
0 15 10 * * ? | 天天10:15運行 |
0 15 10 * * ? * | 天天10:15運行 |
0 15 10 * * ? 2008 | 在2008年的天天10:15運行 |
0 * 14 * * ? | 天天14點到15點之間每分鐘運行一次,開始於14:00,結束於14:59。 |
0 0/5 14 * * ? | 天天14點到15點每5分鐘運行一次,開始於14:00,結束於14:55。 |
0 0/5 14,18 * * ? | 天天14點到15點每5分鐘運行一次,此外天天18點到19點每5鍾也運行一次。 |
0 0-5 14 * * ? | 天天14:00點到14:05,每分鐘運行一次。 |
0 10,44 14 ? 3 WED | 3月每週三的14:10分到14:44,每分鐘運行一次。 |
0 15 10 ? * MON-FRI | 每週一,二,三,四,五的10:15分運行。 |
0 15 10 15 * ? | 每個月15日10:15分運行。 |
0 15 10 L * ? | 每個月最後一天10:15分運行。 |
0 15 10 ? * 6L | 每個月最後一個星期五10:15分運行。 |
0 15 10 ? * 6L 2007-2009 | 在2007,2008,2009年每月的最後一個星期五的10:15分運行。 |
0 15 10 ? * 6#3 | 每個月第三個星期五的10:15分運行。 |
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
6.2 編寫任務類
package com.example.task;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
/**
* @Auther: wuyilong
* @Date: 2019/3/20 10:32
* @Description:
*/
public class MjtTask extends QuartzJobBean {
6.3 編寫配置類
package com.example.config;
import com.example.task.MjtTask;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Auther: wuyilong
* @Date: 2019/3/20 10:33
* @Description:
*/
6.4 運行結果