Quartz實現任務調度


一、任務調度概述

在企業級應用中,經常會制定一些“計划任務”,即在某個時間點做某件事情,核心是以時間為關注點,即在一個特定的時間點,系統執行指定的一個操作,任務調度涉及多線程並發、線程池維護、運行時間規則解析、運行現場的保護以恢復等方面。Quartz框架是一個開源的企業級任務調度服務,已經被作為任務調度的良好解決方案


二、Quartz框架核心概念

Quartz對任務調度進行了高度抽象,提出了3個核心概念,並在org.quartz包中通過接口和類進行了描述

任務:就是執行的工作內容。Quartz提供Job接口來支持任務定義

觸發器:定義觸發Job執行的時間觸發規則。Quartz提供Trigger類及其子類支持觸發器功能,

調度器:Quartz提供了Scheduler接口,將工作任務和觸發器綁定,保證任務可以在正確的時間執行


三、Quartz框架的使用流程

案例:

從當前時間開始執行一個特定操作 

①:引入jar文件

②:創建entity實體層定義任務的模板

定制一個泛型集合用戶存儲多個Plan對象,提供一個方法讀取該泛型集合中的data

④:提醒業務類

⑤:真正的任務對象和觸發器對象

步驟一:

步驟二:Plan實體類,並有對應的時間和任務內容

public class Plan {
    //時間
	private String date;
	
	//任務
	private String task;
	
	@Override
	public String toString() {
		return "Plan [date=" + date + ", task=" + task + "]";
	}

	
	public Plan() {
	}

	public Plan(String date, String task) {
		super();
		this.date = date;
		this.task = task;
	}

步驟三:定義Service,創建集合,遍歷

public class RemindService {

	//創建一個集合,並且方法返回值是一個集合類型
	public List<Plan> getPlans(){
		List<Plan> list=new ArrayList<Plan>();
	
		Plan p1=new Plan("2016年12月17日","計划一");
		Plan p2=new Plan("2016年12月18日","計划二");
		
		list.add(p1);
		list.add(p2);
		return list;
		
	}
	
	//用來打印集合中提醒內容的方法
	public void printMessage(){
		List<Plan> list= getPlans();
		for (Plan plan : list) {
			System.out.println("計划的時間:"+plan.getDate()+"\t"+"計划內容:"+plan.getTask());
		}
	}
}

步驟四:創建Quartz層,提醒業務類,實現Job接口,並植入Service對象

 

步驟五:構建Job、Trigger,並綁定Job和Trigger

	public static void tool() throws Exception{
	      //構建Job
	     JobDetail job = JobBuilder.newJob(RemindJob.class)
				         .withIdentity("job1", "group1").build();
		 
	     //構建Trigger 
	    Date runTime = DateBuilder.evenMinuteDate(new Date(System.currentTimeMillis()));
	    Trigger trigger = TriggerBuilder.newTrigger()
	    		.withIdentity("trigger1", "group1")
	    		.startAt(runTime).build();
   
	    //綁定Job和Trigger
	    //創建調度者工廠
	    SchedulerFactory sf = new StdSchedulerFactory();
	    //創建一個調度者
	    Scheduler sched = sf.getScheduler();
	   //注冊並進行調度
	    sched.scheduleJob(job,trigger);
	   //啟動調度
	    sched.start();
	    
	    /*Thread.sleep(3000);
	    sched.shutdown();*/
	}
    
    
public static void main(String[] args) throws Exception {
	tool();
	System.out.println("你猜");
}
}

 


每隔一段時間執行一次操作

 


在特殊時間執行某次操作

 使用CronTrigger

CronTrigger也是Trigger的子類

CronTriggerSimpleTrigger的對比:

CronTrigger允許用戶更精准地控制任務的運行日期和時間,而不僅僅是定義工作的頻度

CronTrigger通過Cron表達式定義准確的運行時間點。創建CronTrigger的語法如下:

 


四、Cron表達式

 要使用CronTrigger,必須掌握Cron表達式

 Cron表達式由6~7個由空格分隔的時間元素組成。第7個元素可選 

 

Cron表達式有幾個特殊的字符,說明如下:

Cron表達式案例:

示例:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM