Quartz框架:定时任务

任务调度的核心概念为:

  1. 任务(job):最终实际要执行的操作
  2. 触发器(trigger):控制任务执行的时机
  3. 调度器(scheduler):借助触发器,对任务执行进行调度,相当于管理者

使用步骤

创建任务类,实现Job接口,类中写要执行的任务
public class Myjob  implements Job{

   @Override
   public void execute(JobExecutionContext jec) throws JobExecutionException {
      
   	for (int i = 1; i <= 7; i++) {
   		String s = "p"+i;
   		 System.out.println((String) jec.getJobDetail().getJobDataMap().get(s));	
   	}
   }
}

在执行类中创建触发器对象,调度器对象,并设置执行时机,使用cron触发器需要只用cron表达式,可使用cron表达式在线生成器生成

public class Test {


   public static void main(String[] args) {
   	dropHoliadays();
   }
   //简单触发器
  static void simpleTrigger(){
      
      try {
//			创建jobdetail对象,该对象关联任务类
   		JobDetail jobDetail = new JobDetail("myjob",Myjob.class);
//			为任务传递参数
   		JobDataMap jobDataMap = jobDetail.getJobDataMap();
   		jobDataMap.put("p1", ".     ▉▉▉      ▉▉▉    ");
   		jobDataMap.put("p2", ".   ▉▉▉▉▉▉▉▉▉▉▉▉▉");
   		jobDataMap.put("p3", ".  ▉▉▉▉▉▉▉▉▉▉▉▉▉▉");
   		jobDataMap.put("p4", ".    ▉▉▉▉▉▉▉▉▉▉▉");
   		jobDataMap.put("p5", ".      ▉▉▉▉▉▉▉▉");
   		jobDataMap.put("p6", ".        ▉▉▉▉▉");
   		jobDataMap.put("p7", ".          ▉▉");
//			创建触发器对象
   		SimpleTrigger st = new SimpleTrigger("st1");
//			设置时间间隔
   		st.setRepeatInterval(3000);
//			设置开始时间
   		st.setStartTime(new Date(System.currentTimeMillis()+1000));
//			设置执行次数
   		st.setRepeatCount(-1);
//			创建调度工厂
   		SchedulerFactory sf = new StdSchedulerFactory();
//			获取触发
   		Scheduler scheduler = sf.getScheduler();
//			绑定触发器与任务
   		scheduler.scheduleJob(jobDetail, st);
//			启动调度执行
   		scheduler.start();
//			线程休眠
   		Thread.sleep(10000);
//			关闭调度
   		scheduler.shutdown();
   } catch (Exception e) {
       System.out.println("定时任务处理错误!!");	
   }
  }
  
  //复杂触发器
   static void cron() {
   	try {	
//		创建jobdetail对象,该对象关联任务类
   	JobDetail jobDetail = new JobDetail("myjob",Myjob.class);
//		为任务传递参数
   	JobDataMap jobDataMap = jobDetail.getJobDataMap();
   	
   	jobDataMap.put("p1", ".     ▉▉▉      ▉▉▉    ");
   	jobDataMap.put("p2", ".   ▉▉▉▉▉▉▉▉▉▉▉▉▉");
   	jobDataMap.put("p3", ".  ▉▉▉▉▉▉▉▉▉▉▉▉▉▉");
   	jobDataMap.put("p4", ".    ▉▉▉▉▉▉▉▉▉▉▉");
   	jobDataMap.put("p5", ".      ▉▉▉▉▉▉▉▉");
   	jobDataMap.put("p6", ".        ▉▉▉▉▉");
   	jobDataMap.put("p7", ".          ▉▉");
//		创建触发器对象
   	
       CronTrigger  ct = new CronTrigger("ct1");
//	        设置cron表达式,即执行规则
       ct.setCronExpression("0,10,20,30 * * * * ?");
//		设置开始时间
       ct.setStartTime(new Date(System.currentTimeMillis()+1000));
//		创建调度工厂
   	SchedulerFactory sf = new StdSchedulerFactory();
//		获取触发
   	Scheduler scheduler = sf.getScheduler();
//		绑定触发器与任务
   	scheduler.scheduleJob(jobDetail, ct);
//		启动调度执行
   	scheduler.start();
//		线程休眠
   	Thread.sleep(1000*60*2);
//		关闭调度
   	scheduler.shutdown();
   	} catch (Exception e) {
   		
   	}        
   }
   
   //指定cron触发器后剔除某些日期,精确到日,如国庆,元旦等
   static void dropHoliadays() {
   	try {	
//		创建jobdetail对象,该对象关联任务类
   	JobDetail jobDetail = new JobDetail("myjob",Myjob.class);
//		为任务传递参数
   	JobDataMap jobDataMap = jobDetail.getJobDataMap();
   	
   	jobDataMap.put("p1", ".     ▉▉▉      ▉▉▉    ");
   	jobDataMap.put("p2", ".   ▉▉▉▉▉▉▉▉▉▉▉▉▉");
   	jobDataMap.put("p3", ".  ▉▉▉▉▉▉▉▉▉▉▉▉▉▉");
   	jobDataMap.put("p4", ".    ▉▉▉▉▉▉▉▉▉▉▉");
   	jobDataMap.put("p5", ".      ▉▉▉▉▉▉▉▉");
   	jobDataMap.put("p6", ".        ▉▉▉▉▉");
   	jobDataMap.put("p7", ".          ▉▉");
//		创建触发器对象
       CronTrigger  ct = new CronTrigger("ct1");
//	        设置cron表达式,即执行规则
       ct.setCronExpression("0-50 * * * * ?");
//		设置开始时间
       ct.setStartTime(new Date(System.currentTimeMillis()+1000));
//		创建调度工厂
   	SchedulerFactory sf = new StdSchedulerFactory();
//		获取触发
   	Scheduler scheduler = sf.getScheduler();
   	//创建剔除元素对象
   	AnnualCalendar ac = new AnnualCalendar();
   	//创建指定日期对象
   	Calendar dropGuoQing = GregorianCalendar.getInstance();
   	//设置月份,从0开始计数,如10月,则写9
   	dropGuoQing.set(Calendar.MONTH, 11);
   	//设置日期,从1开始计数
   	dropGuoQing.set(Calendar.DATE, 22);
//		将日期绑定到剔除元素对象,true为剔除,false为包含
   	ac.setDayExcluded(dropGuoQing, true);
//		将节假日绑定到调度器,第一个为名字
   	scheduler.addCalendar("GuoQing", ac, true,true);
//		将剔除日期绑定到触发器
   	ct.setCalendarName("GuoQing");
//		绑定触发器与任务
   	scheduler.scheduleJob(jobDetail, ct);
//		启动调度执行
   	scheduler.start();
//		线程休眠
   	Thread.sleep(1000*60*3);
//		关闭调度
   	scheduler.shutdown();
   	} catch (Exception e) {
   		
   	}        
   }
}

猜你喜欢

转载自blog.csdn.net/qq_36677358/article/details/84339263