Quartz介紹
任務調度框架“Quartz”是OpenSymphony開源組織在Job scheduling領域又一個開源項目,是完全由java開發的一個開源的任務日程管理系統,
“任務進度管理器”就是一個在預先確定(被納入日程)的時間到達時,負責執行(或者通知)其他軟件組件的系統。
簡單來說就是實現“計劃(或定時)任務”的系統,例如:訂單下單後未付款,15分鐘後自動撤消訂單,並自動解鎖鎖定的商品
Quartz的觸發器
觸發器用來告訴調度程序作業什麼時候觸發。框架提供了5種觸發器類型,但兩個最常用的SimpleTrigger和CronTrigger。
五種類型的Trigger(定時器)
SimpleTrigger,CronTirgger,DateIntervalTrigger,NthIncludedDayTrigger和Calendar類( org.quartz.Calendar)。
場景:
SimpleTrigger:執行N次,重複N次
CronTrigger:幾秒 幾分 幾時 哪日 哪月 哪周 哪年,執行
存儲方式
RAMJobStore(內存作業存儲類型)和JDBCJobStore(數據庫作業存儲類型),兩種方式對比如下:
優點 缺點
RAMJobStore 不要外部數據庫,
配置容易,運行速度快 因爲調度程序信息是存儲在被分配給JVM的內存裏面,
所以,當應用程序停止運行時,所有調度信息將被丟失。
另外因爲存儲到JVM內存裏面,所以可以存儲多少個Job和Trigger將會受到限制
JDBCJobStor 支持集羣,因爲所有的任務信息都會保存 運行速度的快慢取決與連接數據庫的快慢
到數據庫中,可以控制事物,還有就是如
果應用服務器關閉或者重啓,任務信息都
不會丟失,並且可以恢復因服務器關閉或
者重啓而導致執行失敗的任務
在線生成表達式網址:
所需pom依賴
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>
具體作業類代碼
/**
* @author LiuJiayi
* @site www.liuyianmo.com
* @company zking
* @create 2019-02-23 20:08
*/
public class RamJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
// 調用任務
System.out.println("我是你要調用實現定時代碼的方法");
JobDetail jobDetail = jobExecutionContext.getJobDetail();
JobDataMap jobDataMap = jobDetail.getJobDataMap();
System.out.println("name: "+jobDataMap.get("name")+",job: "
+jobDataMap.get("job"));
}
執行作業類邏輯
/**
* @author LiuJiayi
* @site www.liuyianmo.com
* @company zking
* @create 2019-02-23 20:12
*/
public class RamJobTest {
public static void main(String[] args) throws SchedulerException {
// 調度器
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
// 詳細信息(業務類)
JobDetail jobDetail = newJob(RamJob.class)
.withDescription("業務類")
.withIdentity("jobDetail","group1")
.usingJobData("name","niuniu")
.build();
//向具體執行的作業類傳值方式二
JobDataMap jobDataMap=jobDetail.getJobDataMap();
jobDataMap.put("job","student");
// 觸發器
Trigger trigger = TriggerBuilder.newTrigger()
.withDescription("觸發器")
.withIdentity("trigger1","group1")
.usingJobData("name","jiajia")
// SimpleTrigger:執行N次,重複N次
// .withSchedule(SimpleScheduleBuilder.repeatSecondlyForTotalCount(2,3))
// 每5秒執行一次邏輯代碼
.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
.build();
// 注入業務類以及觸發器到調度器中
scheduler.scheduleJob(jobDetail,trigger);
// 啓動調度器
scheduler.start();
}
}
quartz的核心類
調度器:Scheduler
觸發器:Trigger
業務類:JobDetai