quartz基本使用案例

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();
    	}
    
    }
    

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值