說說Quartz Scheduler任務排程框架
前言
在很多公司,特別是網際網路公司,需要在指定的時間進行一些跑批任務來完成業務實現,Java中實現定時的方式有很多,其中可自己實現,也有比較成熟的框架,如: Quartz,今天來介紹一下Quartz的使用,
簡述
Quartz is a richly featured, open source job scheduling library that can be integrated within virtually any Java application - from the smallest stand-alone application to the largest e-commerce system. Quartz can be used to create simple or complex schedules for executing tens, hundreds, or even tens-of-thousands of jobs; jobs whose tasks are defined as standard Java components that may execute virtually anything you may program them to do. The Quartz Scheduler includes many enterprise-class features, such as support for JTA transactions and clustering.
Quartz是一個功能豐富的開源作業框架,可以整合到幾乎任何的Java應用程式中,從最小的獨立應用程式或最大的電商系統,Quartz可用於建立數十,數百甚至數十萬個簡單的作業或複雜的計劃,任務定義為標準的Java元件業務,可以執行幾乎任何可以對其進行程式設計的任務,Quartz Scheduler包含許多企業級功能,例如: 支援JTA事務和叢集。
功能
- 支援叢集,故障轉移
- 精確可控的任務排程
- 事務支援等
環境準備
該專案使用intellij IDE+Maven作為開發開發工具。
quartz maven依賴:
1 2 3 4 5 6 7 8 9 10 11 12 |
<!-- quartz start--> |
quartz中使用slf4j作為日誌工具。
log maven依賴為:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<!--log start--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.8.2</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> <scope>test</scope> </dependency> <!--log end--> |
簡單job實現
有了環境準備,接下來,我們就可以來用一用quartz了,首先,我們寫一個job類,實現job介面,實現job介面中的execute方法,在真實環境中,在該方法中一般進行一些業務邏輯的處理,(在本例中,直接列印日誌,方便檢視有執行)。
Myjob類程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/** * @createTime: 2017年06月20日 * @author: juyuqian * @version: 0.0.1 * 描述: job任務 */ public class MyJob implements Job { public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { System.out.println("執行execute..........."); } } |
有了任務,就需要有呼叫job的地方,在本例中,通過main函式的方式來演示任何呼叫job任務:
程式碼如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
/** * @createTime: 2017年06月20日 * @author: juyuqian * @version: 0.0.1 * 描述: */ public class MainQuartzSimple { /** * 執行job資料 * @param args */ public static void main(String[] args){ try{ //1.獲取scheduler 例項 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); //2.設定job資訊,以及觸發器資訊 JobDetail jobDetail = JobBuilder.newJob(MyJob.class).withIdentity("andyqian001","group1").build(); Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1","group1").startNow().withSchedule(simpleSchedule() .withIntervalInSeconds(2).repeatForever()).build(); scheduler.scheduleJob(jobDetail, trigger); //3.開始任務排程 scheduler.start(); //4. 關閉scheduler.shutdown(); }catch(SchedulerException ex){ ex.printStackTrace(); } } } |
- 首先通過StdSchedulerFactory工廠獲取一個預設的Scheduler例項
- 設定JobDetail,注意JobDetail是介面,通過JobBuilder建造者獲取一個JobDetail物件. 這裡Trigger是一個介面,在Quartz中預設有若干實現類,
其中Trigger的實現類有: - CalendarIntervalTrigger()
- MutableTrigger
- SimpleTrigger
- CoreTrigger
- CronTrigger (通過cron表示式觸發)
- DaliyTimeIntervalTrigger
如下圖所示:
其類圖如下所示
-
效果如下:
CronTrigger使用
在這裡Job沿用MyJob中的實現方法,
CronTrigger程式碼如下:/** * @createTime: 2017年06月20日 * @author: juyuqian * @version: 0.0.1 * 描述: */ public class QuartzDataSimple02 { /** * test job的資料資訊 */ public static void main(String[] args){ try{ //1. 獲取任務排程 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); //2. 設定jobDetail以及cronTrigger觸發器 JobDetail jobDetail = JobBuilder.newJob(MyJob.class).withIdentity("andyqian002","group1").build(); CronTriggerImpl cronTrigger = new CronTriggerImpl(); cronTrigger.setName("group1"); cronTrigger.setCronExpression("0/2 * * * * ?"); scheduler.scheduleJob(jobDetail, cronTrigger); //3.開啟 scheduler.start(); }catch(SchedulerException ex){ ex.printStackTrace(); }catch(ParseException ex){ ex.printStackTrace(); } } }
這一段程式碼中涉及到了Cron表示式,現在沒明白沒關係,跑起來,效果和 簡單job實現 的實現是一樣的,到這裡,我們已經能夠簡單的使用Quartz了,休息一下,我們一起來看看[0/2 ?]表示式是如何構成的。
Cron表示式
Cron表示式由6個必選欄位與1個可選欄位組成,以空格為分隔符,其分別為:
欄位 | 含義 | 是否必須 | 可選值 | 允許的特殊字元 |
---|---|---|---|---|
seconds | 秒 | 必選 | 0-59 | , - * / |
minutes | 分 | 必選 | 0-59 | , - * / |
hours | 時 | 必選 | 0-23 | , - * / |
daysOfMonth | 天 | 必選 | 1-31 | , - * ? / L W |
months | 月 | 必選 | 0-11 or JAN-DEC | , - * / |
daysOfWeek | 週中的某天 | 必選 | 1-7 or SUN-SAT | , - * ? / L # |
years | 年 | 可選 | 1970-2199 | , - * / |
其中years欄位為可選欄位,其餘均為必選欄位。
下表中為特殊字元的含義:
符號 | 解釋 | 表示式 | 解釋 |
---|---|---|---|
* | 所有值 | 10 ? | 如果*在minutes欄位上為每分鐘執行 |
? | 表示某一值 | 表示每月的某一天,每週的某一天 | |
- | 指定範圍 | 0 0 10-12 ? | 表示10,11,12點均執行 |
, | 與的關係 | 0 0 10,11,12 ? | 表示10,11,12點均執行,與0 0 10-12 ?等價 |
/ | 指定增量 | 0/10 ? | 表示每10秒執行一次,執行秒為:[ 0,10,20,30] |
L | 最後一天 | 0 10 0 L * ? | 每月的最後一天凌晨12點10執行一次 |
# | 第幾個星期幾 | 0 0 0 ? * 3 # 3 | 每月的第3個星期2執行凌晨12點整執行一次 |
W | 最近的一個工作日 | 0 0 0 15W * ? |
在15號最近的一個工作日執 行 |
注意事項:
0 0 0 15W * ? 表示15號最近的一個工作日執行,如果15號是星期日,則為下週一執行,如果15號為星期六,執行時間為週五
小結
以上是Quartz Scheduler框架的使用,其中包括Cron表達是的介紹,你懂了嗎?(PS:應該問自己懂了嗎?記錄這篇文章就是自己容易忘記Cron表示式的書寫,自己記錄一篇,快忘記了就過來瞅瞅,這就是我寫部落格的初衷!)
參考連結
相關推薦
說說Quartz Scheduler任務排程框架
前言 在很多公司,特別是網際網路公司,需要在指定的時間進行一些跑批任務來完成業務實現,Java中實現定時的方式有很多,其中可自己實現,也有比較成熟的框架,如: Quartz,今天來介紹一下Quartz的使用, 簡述 Quartz is a richly fe
Quartz 企業級任務排程框架(一)之簡介
什麼是Quartz任務排程庫?Quartz是一個功能豐富的開源作業排程庫,可以整合到幾乎任何Java應用程式中 - 從最小的獨立應用程式到最大的電子商務系統。Quartz可以用來建立執行數十,數百乃至數萬個作業的簡單或複雜的計劃;作業的任務被定義為標準的Java元件,它可以執
quartz開源任務排程框架知識總結(一)
1.1.1 JDK Timer & TimerTask 如果是執行簡單的有一定執行週期的,那麼使用jdk自帶的timer是最簡單的。具體: ①、編寫一個簡單類繼承 TimerTask,在這個新編寫的類中重寫父類中run方法,在run中執行要執
Quartz分散式任務排程框架
分散式任務排程 任務排程是指基於給定的時間點,給定的時間間隔或者給定執行次數自動的執行任務。任務排程涉及到多執行緒併發、執行時
Quartz任務排程框架初探
Quartz任務排程框架初探 什麼是Quartz? Quartz 是一個完全由 Java 編寫的開源作業排程框架,為在 Java 應用程式中進行作業排程提供了簡單卻強大的機制。 Quartz 可以與 J2EE 與 J2SE 應用程式相結合也可以單獨使用。
任務排程框架quartz使用總結(異常處理,解決恢復後多次排程處理)
任務排程框架quartz使用總結(異常處理,解決恢復後多次排程處理) 首先先說說什麼是排程框架,大白話所謂的排程框架你可以把它看成一個定時任務管理框架,並且quartz框架是多執行緒的, quartz最主要的三大基本特性: (1)排程器&nbs
Quartz任務排程框架--任務執行流程(二)
上一篇部落格Quartz任務排程框架--簡介與示例(一)中我們已經簡介和示例程式碼對quartz有了初步的認識,這篇部落格我們通過追蹤quartz的定時任務執行流程來加深對quartz的瞭解。 1、執行活動執行緒 (1)Quartz_Worker-*執行
Quartz任務排程框架(啟動定時任務框架)
Quartz任務排程框架(啟動定時任務框架) Quartz是OpenSymphony開源組織在Jobscheduling領域又一個開源專案,它可以與J2EE與J2SE應用程式相結合也可以單獨使用。Quartz可以用來建立簡單或為執行十個,百個,甚至是好幾萬個Jobs這樣複雜的
java計劃任務排程框架quartz結合spring實現排程的配置例項程式碼分享
一:quartz簡介 OpenSymphony 的Quartz提供了一個比較完美的任務排程解決方案。 Quartz 是個開源的作業排程框架,定時排程器,為在 Java 應用程式中進行作業排程提供了簡單卻強大的機制。 Quartz中有兩個基本概
quartz任務排程框架實現任務定時執行,不傳參的配置(一)
quartz是一個任務排程框架,可以用它來實現一些需要定時執行的任務。 本次實現的是spring配置整合quartz 1.配置如下:目標bean和bean中的方法需要自己定義,這個方法就是要執行
quartz任務排程框架入門
1、 CronTrigger時間格式配置說明 CronTrigger配置格式: 格式: [秒] [分] [小時] [日] [月] [周] [年] 序號 說明 是否必填 允許填寫的值 允許的萬用字元 1 秒 是 0-59 , - * /
SSM框架整合 quartz 定時任務排程
maven的pom.xml <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId&
LTS 輕量級分散式任務排程框架(Light Task Scheduler)
框架概況: LTS是一個輕量級分散式任務排程框架。有三種角色, JobClient, JobTracker, TaskTracker。各個節點都是無狀態的,可以部署多個,來實現負載均衡,實現更大的負載量, 並且框架具有很好的容錯能力。 採用多種註冊中心(Zoo
任務排程框架Quartz(一) Quartz——一個強大的定時任務排程框架
Quartz,水晶、石英,一個簡單樸素有美麗的名字,在Java程式界,Quartz大名鼎鼎,很多Java應用幾乎都整合或構建了一個定時任務排程系統,Quartz是一個定時任務排程框架。 何為定時任務排程框架?簡而言之,它可以領會我們的意圖在未來某個時刻做我們想
企業級定時任務排程框架Quartz中文文件chm
作業排程,在一個大的組織中每天的每小時跑上百個作業已屬普遍。並且作業的規模與複雜性仍在持續的上揚,因此批量作業和作業排程器也就隨需應生。Quartz的使用場景主要為: 1:定時郵件提醒和告警。 2:定時執行檔案傳輸操作 3:定時建立銷售報表 4:定時產生日誌資訊 ....等
Quartz任務排程框架
廢話的前言 以前憑藉年輕,凡事都靠腦記。現在工作幾年後發現,很多以前看過、用過的東西,再次拿起的時候總覺得記不牢靠。”好記性不如爛筆頭”應該是某位上了年紀的大叔的切膚之痛(僅次於上了年紀的難言之癮)。 我覺得這事得怪怪中國的應試教育,中國的考試方式就是要
任務排程框架Quartz原理簡介
第一章 Quartz 1.1 Quartz概念 Quartz是OpenSymphony開源組織的一個Java開源專案, 在2009被Terracotta收購。Quartz官網 1.2 Quartz任務排程主要元素 Quartz任務排程
C# 定時任務 排程框架 WebWork (Quartz.NET) Web版的Windows服務
說起這個,還是覺得很自豪的(另外這裡還要特別感謝Nick同學),至少目前我沒有見到有這樣現成框架,這個東西主要是用來排程任務的,就是根據時間定時執行一個任務,而這個任務你可以用C# 寫成一個一個的dll ,引用到框架裡就可以了。有UI介面的,我給它起了一個名字叫做WebWo
任務排程框架Quartz快速入門!
[toc] ## Quartz是什麼 Quartz是一個功能強大的開源任務排程庫,幾乎可以整合到任何Java應用程式中,無論是超小型的獨立應用還是超大型電子商務系統。 它常用於企業級應用中: - Driving Process Workflow:當新訂單下達,可以安排一個30分鐘內觸發的任務,檢查訂單狀
SpringBoot整合任務排程框架Quartz及持久化配置
[toc] > 本文側重SpringBoot與Quartz的整合,Quartz的基本入門概念不清楚的小夥伴可以看看這篇文章:[任務排程框架Quartz快速入門!](https://www.cnblogs.com/summerday152/p/14192845.html) ## 本篇要點 - 介紹Spri