前言
本篇博客主要是分享,高级篇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");
}
}