Java Quartz 構建定時排程任務
阿新 • • 發佈:2019-01-27
前言
在日常開發中,我們經常會遇見這樣的情況,我們要在指定的時間去執行一個任務,或者週期性在某個時間點上執行一個任務,這種事情讓人去操作顯然是不合適的,因此,我們可以使用Quartz來實現我們的要求。
Quartz對於Java提供友好的API和文件,幫助我們構建定時排程任務,本文中的quartz版本為2.2版本。
介紹Quartz
quartz是一個開源的定時排程類庫,使用它可以簡單方便的在指定的時間或時間週期內執行定時任務,關於quartz的幾個核心API需要先介紹一下:
- Scheduler:核心任務排程器
- Job:你需要被排程器執行的任務需要實現的一個介面
- JobDetail:每個任務的具體細節
- Trigger:一個定義了排程器上面需要有哪些任務需要被執行的元件
- JobBuilder:通常用來構建/定義 JobDetail例項
- TriggerBuilder:通常用來構建/定義 Trigger例項
實現
maven依賴:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version >
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
如果使用的Spring容器,需要多加一個Spring的支援依賴。
然後我們首先開始建立一個Job任務:
public class ExecuteJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
String name = context.getJobDetail().getKey().getName();
System.out.println("定時排程啟動成功");
}
}
我們建立了一個Job定時任務,這裡獲取了一個name屬性,這個我們到後邊再說。
然後我們開始建立定時任務排程:
public class schedule {
public void operateSchedule() {
//1.建立Scheduler的工廠
SchedulerFactory sf = new StdSchedulerFactory();
try {
//2.從工廠中獲取排程器例項
Scheduler scheduler = sf.getScheduler();
//3.啟動 排程器
scheduler.start();
//4.建立JobDetail
JobDetail jobDetail =
JobBuilder.newJob(ExecuteJob.class)
.withDescription("資料庫操作定時任務")
.withIdentity("jobName", "group")
.usingJobData("name", 1)
.build();
//5.建立Trigger
Trigger trigger = TriggerBuilder.newTrigger()
.withDescription("定時任務,可自定義時間,執行一次")
.withIdentity("jobName", "group")
//預設在當前時間啟動
.startAt(new Date())
//重複執行的次數
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
.withRepeatCount(0))
.build();
//6.註冊任務和定時器
scheduler.scheduleJob(jobDetail, trigger);
} catch (Exception e) {
e.printStackTrace();
}
}
}
上面的程式碼展示建立一個定時排程任務每一步;
第一步需要建立Scheduler的工廠;
第二步從工廠中獲取排程器例項;
第三步啟動排程器;
第四步建立JobDetail,在JobDetail中,我們可以設定job的名稱與group名稱,並傳遞一個引數值進去,這裡傳遞的值在Job具體執行的地方可以獲取到,就是在我們最開始的地方看到的程式碼;
第五步建立Trigger,Trigger需要配置一下Job的name與group,並設定任務開始執行的時間,與執行的週期頻度
第六步註冊任務和定時器,註冊完成後,任務將會在指定的時間去呼叫Job執行。
總結
相比於在Spring中通過配置檔案的方式,通過API進行呼叫的方式更加的靈活,可以動態執行執行,也可以動態停止執行定時任務,在本文中只展示瞭如何建立並啟動一個任務,關於更多使用的方式可以參見官方的文件Quartz Tutorials