1. 程式人生 > >說說Quartz Scheduler任務排程框架

說說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-->
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId>
<version>2.3.0</version> </dependency> <!--quartz end-->

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();
        }
    }
}
  1. 首先通過StdSchedulerFactory工廠獲取一個預設的Scheduler例項
  2. 設定JobDetail,注意JobDetail是介面,通過JobBuilder建造者獲取一個JobDetail物件. 這裡Trigger是一個介面,在Quartz中預設有若干實現類,
    其中Trigger的實現類有:
  3. CalendarIntervalTrigger()
  4. MutableTrigger
  5. SimpleTrigger
  6. CoreTrigger
  7. CronTrigger (通過cron表示式觸發)
  8. DaliyTimeIntervalTrigger
    如下圖所示:
    實現類
    其類圖如下所示
實現類
  1. 效果如下:
    效果

    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