【高級篇】進階提升SpringBoot+Quartz實戰---監聽器配置

前言

本篇博客主要是分享,高級篇Quartz的配置,嗨皮的開發與工作


1.監聽器TriggerListener詳解

  • 監聽與觸發器(trigger)相關事件
    1.觸發器觸發:triggerFired(監聽觸發器的開始)
    2.觸發器完成:triggerComplete
    3.觸發器否決:vetoJobExecution

1.編寫監聽器實例

/**
*通過實現這個接口,我們發現需要實現的方法很多,
* 我每當實現這個接口,重寫他的方法,感覺有點彆扭,
* 怎麼才能,我實現你這個藉口,但是,我不想實現所有的方法,
* 來一波騷操作。。。。
*/

在這裏插入圖片描述

  • 修改:
package com.zcw.springbootquartz.listener;

import org.quartz.JobExecutionContext;
import org.quartz.Trigger;
import org.quartz.listeners.TriggerListenerSupport;
import org.springframework.stereotype.Component;

import java.time.LocalTime;

/**
 * @ClassName : MyTriggerListener
 * @Description : 監聽器編寫
 * @Author : Zhaocunwei
 * @Date: 2020-06-13 09:15
 */
@Component
public class MyTriggerListener extends TriggerListenerSupport {

    @Override
    public String getName() {
        return "myTriggerListener";
    }
    /**
     * 打印觸發器開始完成時間與結束時間
     */
    @Override
    public void triggerFired(Trigger trigger, JobExecutionContext context) {
        super.triggerFired(trigger, context);
        LocalTime now = LocalTime.now();
        System.out.println(now.toString()+"Trigger is fired!");
    }

    @Override
    public void triggerComplete(Trigger trigger, JobExecutionContext context,
                                Trigger.CompletedExecutionInstruction triggerInstructionCode) {
        super.triggerComplete(trigger, context, triggerInstructionCode);
        String triggerToString = triggerInstructionCode.toString();
        LocalTime now = LocalTime.now();
        System.out.println(now.toString()+"Trigger is completed!"+ triggerToString);
    }
}



  • 把上面的Trigger監聽器,註冊到我們的調度中心中去:

解決quqrtz監聽器無法注入SpringBoot項目中問題

暫定,說實現工廠,沒有實現這個功能,ε=(´ο`*)))唉— 後期使用xxx-job替代
在這裏插入圖片描述

2.TriggerListener實戰:節假日期間不執行任務

在這裏插入圖片描述


package com.zcw.springbootquartz.listener;

import org.quartz.JobExecutionContext;
import org.quartz.Trigger;
import org.quartz.listeners.TriggerListenerSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.stereotype.Component;

import java.time.LocalTime;
import java.util.Calendar;

/**
 * @ClassName : MyTriggerListener
 * @Description : 監聽器編寫
 * @Author : Zhaocunwei
 * @Date: 2020-06-13 09:15
 */
@Component
public class MyTriggerListener extends TriggerListenerSupport {


    @Override
    public String getName() {
        return "myTriggerListener";
    }
    /**
     * 打印觸發器開始完成時間與結束時間
     */
    @Override
    public void triggerFired(Trigger trigger, JobExecutionContext context) {
        super.triggerFired(trigger, context);
        LocalTime now = LocalTime.now();
        System.out.println(now.toString()+"Trigger is fired!");
    }

    @Override
    public void triggerComplete(Trigger trigger, JobExecutionContext context,
                                Trigger.CompletedExecutionInstruction triggerInstructionCode) {
        super.triggerComplete(trigger, context, triggerInstructionCode);
        String triggerToString = triggerInstructionCode.toString();
        LocalTime now = LocalTime.now();
        System.out.println(now.toString()+"Trigger is completed!"+ triggerToString);
    }

    @Override
    public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) {
        System.out.println("vetoJobExecution 正在執行");
        //如果時間是 5.15. 25. 尾數是5的時間點,就不執行
        Calendar now = Calendar.getInstance();
        int second = now.get(Calendar.SECOND);
        if(second %10 ==5){
            System.out.println("本次Trigger不觸發!!");
            return true;
        }
        return false;
    }
}


3.作業監聽器JobListener詳解

  • 監聽job相關事件
    主要包括: job即將執行,job完成執行

4.JobListener實戰:記錄Job任務執行時間

package com.zcw.springbootquartz.listener;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.listeners.JobListenerSupport;

import java.time.LocalTime;

/**
 * @ClassName : MyJobListener
 * @Description :
 * @Author : Zhaocunwei
 * @Date: 2020-06-13 11:32
 */
public class MyJobListener extends JobListenerSupport {
    @Override
    public String getName() {
        return "myJobListener";
    }

    @Override
    public void jobToBeExecuted(JobExecutionContext context) {
        super.jobToBeExecuted(context);
        LocalTime now = LocalTime.now();
        System.out.println(now.toString()+"jobToBeExecuted");
    }

    @Override
    public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {
        super.jobWasExecuted(context, jobException);
        LocalTime now =LocalTime.now();
        System.out.println(now.toString()+"jobWasExecuted");
    }

    @Override
    public void jobExecutionVetoed(JobExecutionContext context) {
        super.jobExecutionVetoed(context);
        LocalTime now =LocalTime.now();
        System.out.println(now.toString()+"jobExecutionVetoed");
    }
}



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