【高级篇】进阶提升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");
    }
}



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