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