Quartz入門

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  支持集羣,因爲所有的任務信息都會保存    運行速度的快慢取決與連接數據庫的快慢

                到數據庫中,可以控制事物,還有就是如

                果應用服務器關閉或者重啓,任務信息都

                不會丟失,並且可以恢復因服務器關閉或

                者重啓而導致執行失敗的任務   

在線生成表達式網址:

http://cron.qqe2.com/

 

 

所需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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章