1.quartz简单实用的任务调度框架。是一个特性丰富的开源的任务调度库,它几乎可以嵌套所有的Java程序,从很小的独立应用程序到大型商业系统。quartz可以用来创建成百上千的简单的或者复杂的任务,这些任务可以用来执行任何程序可以做的事情。quartz拥有很多企业级的特性,包括支持JTA事务和集群。quartz是一个老牌的任务调度系统,98年构思,01年发布,现在更新比较慢,原因是他已经很成熟了。
2.自定义job:
package com.self.quartz.job;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/** 需要管理的任务类,必须实现quartz的内部job接口
*
* @ClassName:Myjob
* @Description:TODO
* @author guanjun.zhou
* @data: 2021-1-1817:48:12
*/
public class Myjob implements Job{
/**
* 任务触发要执行的方法
*/
public void execute(JobExecutionContext context) throws JobExecutionException {
//获取任务执行时动态绑定的数据
JobDataMap jobDataMap=context.getJobDetail().getJobDataMap();
String group = jobDataMap.getString("group");
String name = jobDataMap.getString("name");
System.out.println(group+"我是谁?我在那里。。。。"+name);
}
}
3.监听器:
- jobListener
package com.self.quartz.listener;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobListener;
public class MyJobListenner implements JobListener{
public String getName() {
String name = getClass().getSimpleName();
System.out.println("获取到的监听器的名称是:"+name);
return name;
}
public void jobToBeExecuted(JobExecutionContext context) {
String name = context.getJobDetail().getKey().getName();
System.out.println(name+"即将执行");
}
//Vetoed:否决
public void jobExecutionVetoed(JobExecutionContext context) {
String name = context.getJobDetail().getKey().getName();
System.out.println(name+"任务被取消掉了");
}
public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {
String name = context.getJobDetail().getKey().getName();
System.out.println(name+"任务执行完成了");
}
}
MySchedulerListener.java
package com.self.quartz.listener;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.SchedulerException;
import org.quartz.SchedulerListener;
import org.quartz.Trigger;
import org.quartz.TriggerKey;
public class MySchedulerListener implements SchedulerListener {
public void jobScheduled(Trigger trigger) {
// TODO Auto-generated method stub
}
public void jobUnscheduled(TriggerKey triggerKey) {
// TODO Auto-generated method stub
}
public void triggerFinalized(Trigger trigger) {
// TODO Auto-generated method stub
}
public void triggerPaused(TriggerKey triggerKey) {
// TODO Auto-generated method stub
}
public void triggersPaused(String triggerGroup) {
// TODO Auto-generated method stub
}
public void triggerResumed(TriggerKey triggerKey) {
// TODO Auto-generated method stub
}
public void triggersResumed(String triggerGroup) {
// TODO Auto-generated method stub
}
public void jobAdded(JobDetail jobDetail) {
// TODO Auto-generated method stub
}
public void jobDeleted(JobKey jobKey) {
// TODO Auto-generated method stub
}
public void jobPaused(JobKey jobKey) {
// TODO Auto-generated method stub
}
public void jobsPaused(String jobGroup) {
// TODO Auto-generated method stub
}
public void jobResumed(JobKey jobKey) {
// TODO Auto-generated method stub
}
public void jobsResumed(String jobGroup) {
// TODO Auto-generated method stub
}
public void schedulerError(String msg, SchedulerException cause) {
System.out.println("schedulerError.....");
}
public void schedulerInStandbyMode() {
System.out.println("schedulerInStandbyMode.....");
}
public void schedulerStarted() {
System.out.println("schedulerStarted.....");
}
public void schedulerStarting() {
System.out.println("schedulerStarting.....");
}
public void schedulerShutdown() {
System.out.println("schedulerShutdown.....");
}
public void schedulerShuttingdown() {
System.out.println("schedulerShuttingdown.....");
}
public void schedulingDataCleared() {
System.out.println("schedulingDataCleared.....");
}
}
- MyTriggerListener.java
package com.self.quartz.listener; import org.quartz.JobExecutionContext; import org.quartz.Trigger; import org.quartz.Trigger.CompletedExecutionInstruction; import org.quartz.TriggerListener; public class MyTriggerListener implements TriggerListener { public String getName() { String simpleName = getClass().getSimpleName(); System.out.println("获取到的监听器的名称是:"+simpleName); return simpleName; } public void triggerFired(Trigger trigger, JobExecutionContext context) { System.out.println("即将执行"); } public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) { System.out.println("取消执行的工作吗?"); return false; } public void triggerMisfired(Trigger trigger) { System.out.println("...was not fired"); } public void triggerComplete(Trigger trigger, JobExecutionContext context, CompletedExecutionInstruction triggerInstructionCode) { System.out.println("...was triggerComplete"); } }
4.测试类
package com.self.quartz.test; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.SimpleScheduleBuilder; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; import com.self.quartz.job.Myjob; import com.self.quartz.listener.MySchedulerListener; /** 简单的使用任务调度器,管理任务 * * @ClassName:TestTrigger * @Description:TODO * @author guanjun.zhou * @data: 2021-1-1818:20:46 */ public class TestTrigger { public static void main(String[] args) throws SchedulerException { //trigger(触发器)触发Job的执行 Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger1", "group1") .startNow() .withSchedule(SimpleScheduleBuilder.simpleSchedule()//执行的条件 .withIntervalInSeconds(2) //一直永远执行 .repeatForever()) .build(); //JobDetail 任务信息(作业实例,定义作业的实例) JobDetail jobDetail=JobBuilder.newJob(Myjob.class) .withIdentity("job1", "group1") .usingJobData("group","触发器:")//绑定数据 .usingJobData("name", "作业本实例。。。") .build(); //将jobDetail和trigger关联起来 SchedulerFactory factory=new StdSchedulerFactory(); //通过工厂对象获取对应的schedule对象 Scheduler scheduler = factory.getScheduler(); //绑定jobDetail和trigger scheduler.scheduleJob(jobDetail,trigger); /** * 三种监听器的测试 */ //1.创建并注册一个全局的 JobListener // scheduler.getListenerManager().addJobListener(new MyJobListenner(),EverythingMatcher.allJobs());//监听匹配所有的工作任务 //创建并注册一个监听特定的 JobListener // scheduler.getListenerManager().addJobListener(new MyJobListenner(),KeyMatcher.keyEquals(JobKey.jobKey("job1","group1"))); //2.创建并注册一个全局的 TriggerListener //scheduler.getListenerManager().addTriggerListener(new MyTriggerListener(),EverythingMatcher.allTriggers());//监听匹配所有的工作任务 //2.创建并注册一个全局的 SchedulerListener scheduler.getListenerManager().addSchedulerListener(new MySchedulerListener()); scheduler.start(); } }