淺談Quartz的Job和JobDetails
阿新 • • 發佈:2018-11-19
一 點睛
1 Job定義
實現業務邏輯的任務介面。
Job介面非常容易實現,只有一個execute方法,類似TimeTask的run方法,在裡面編寫業務邏輯。
2 Job介面原始碼
public interface Job {
void execute(JobExecutionContext context)
throws JobExecutionException;
}
3 Job例項在Quautz中的生命週期
每次排程器執行job時,它在呼叫execute方法前會建立一個新的job例項。
當呼叫完後,關閉的job物件例項會被釋放,釋放的例項會被垃圾回收機制回收。
4 淺談JobDetail
JobDetail為Job例項提供了許多設定屬性,以及JobDataMap成員變數屬性,它用來儲存特定Job例項的狀態資訊,排程器需要藉助JobDetail物件來新增Job例項。
下面4個是JobDetail的重要屬性
name、group、jobClass、jobDataMap
二 實戰
1 啟動類
package com.quartz; import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; import java.text.SimpleDateFormat; import java.util.Date; public class HelloScheduler { public static void main(String[] args) throws SchedulerException { //建立一個JobDetail例項, 將該例項與hellojob class 繫結 JobDetail jobDetail = JobBuilder.newJob(HelloJob.class) .withIdentity("myJob").build(); //演示JobDetail的重要屬性 System.out.println("jobDetail's name:"+jobDetail.getKey().getName()); System.out.println("jobDetail's group:"+jobDetail.getKey().getGroup()); System.out.println("jobDetail's jobclass:"+jobDetail.getJobClass().getName()); //建立一個Trigger例項,定義該job立即執行,並且每隔兩秒鐘重複執行一次 Trigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger","group1") .startNow().withSchedule( SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(2).repeatForever() ).build(); //建立Schedule例項 SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); scheduler.start(); Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("Current Time is:" + simpleDateFormat.format(date)); scheduler.scheduleJob(jobDetail,trigger); } }
2 Job類
package com.quartz; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import java.text.SimpleDateFormat; import java.util.Date; public class HelloJob implements Job{ public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { //列印當前執行的時間 Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("Current Exec Time is:" + simpleDateFormat.format(date)); //編寫具體的業務邏輯 System.out.println("Hello World!"); } }
三 執行結果
jobDetail's name:myJob
jobDetail's group:DEFAULT
jobDetail's jobclass:com.quartz.HelloJob