1. 程式人生 > 其它 >6.22Java任務排程框架:Quartz

6.22Java任務排程框架:Quartz

6.22Java任務排程框架:Quartz

Java任務排程框架:Quartz

由四大部分組成:

  • Scheduler--->排程器,控制所有的排程

  • Trigger--->觸發條件,採用DSL模式

    • DSL:--->Domain-specific language領域特定語言,受限表達下的一種計算機程式語言。宣告式程式設計

      • Method Chaining 方法鏈(流模式)

        • Fluent Style 流暢風格

        • Builder 模式構建器

      • Nested Functions 巢狀函式

      • Lambda Expressions/Closures

      • Functional Sequence

  • JobDetail--->需要處理的JOB

  • Job--->執行邏輯

已經整合到了Sprint裡面

下載Quartz

  • 下載連結

  • 解壓

  • IDEA中匯入該jar包

    • File--->Project Structure--->選擇該專案--->點選專案左上角"+"號--->選擇"JAR or directories"--->找到解壓路徑下的lib目錄下的檔案--->選擇OK

該框架需要有log4j.xml作為資料傳輸格式

例項demo
package thread.quartz;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;

import java.util.Date;

import static org.quartz.DateBuilder.evenMinuteDate;
import static org.quartz.DateBuilder.evenSecondDateAfterNow;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;

/**
* Quartz Introduction to learning
* @since JDK 1.8
* @date 2021/6/22
* @author Lucifer
*/
public class QuartzTestNo2 {

public void run() throws Exception {

// 由於排程器來自於排程器工廠--->建立Scheduler的工廠
SchedulerFactory sf = new StdSchedulerFactory();
// 從工廠中獲取排程器--->初始化完畢
Scheduler sched = sf.getScheduler();

// 建立JobDetail
JobDetail job = newJob(QuartzTestNo1.class).withIdentity("job1", "group1").build();

// 時間
// Date runTime = evenMinuteDate(new Date()); //這是一個靜態方法,有分鐘和秒
Date runTime = evenSecondDateAfterNow();

// 觸發條件
Trigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(runTime).build();

// 註冊任務和觸發條件
sched.scheduleJob(job, trigger);

// 開始呼叫--->啟動
sched.start(); //一看到start方法就知道是多執行緒

try {
// 5s後停止執行緒
Thread.sleep(5L * 1000L);
// executing...
} catch (Exception e) {
//
}

}

public static void main(String[] args) throws Exception {

SimpleExample example = new SimpleExample();
example.run();

}

}