QUARTZ 简单demo

个人觉得无论使用SimpleTrigger 还是CronTirgger 都可以分为以下几个步骤:

  1.      定义一个简单的 任务job 类
  2.      创建一个调度类

在调度类中做如下操作:

  •     通过 StdSchedulerFactory 获取调度器的实例
  •     获取一个 quartz  的独立运行的容器
  •     创建一个JobDetail 并指定 Job在Scheduler 中所属组及名称
  •     创建一个Trigger 并指定任务开始执行的时间,重复次数、时间间隔等
  •     添加 JobDetail 到 scheluder 容器中去,并且和Trigger关联,返回执行时间
  •     启动任务调度程序
  •     关闭任务调度程序

具体代码如下:

import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
public class SimpleJob implements Job {

	@Override
	public void execute(JobExecutionContext context)
			throws JobExecutionException {
		// TODO Auto-generated method stub
		 JobKey jobKey = context.getJobDetail().getKey();
		 System.out.println("SimpleJob says:"+jobKey+" excuting at" + new Date());
	}

	
}

    上面的是定义一个简单的 job 类的代码

   用SimpleTrigger 实现定时任务的代码如下:

import java.util.Date;

import org.quartz.DateBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerMetaData;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class SimpleTriggerDemo1 {
	
	public void run() throws SchedulerException{
		
		//通过StdSchedulerFactory 获取一个调度器的实例
		StdSchedulerFactory factory = new StdSchedulerFactory();
	    //代表 一个quartz的独立运行的容器
		Scheduler scheduler = factory.getScheduler(); 
	    // 获取当前时间15s后的时间
		Date startDate = DateBuilder.nextGivenSecondDate(null, 15);
		
		
//		开始定义一个job1
		
		//创建一个jobDeatil实例并指定Job在Scheduler 中所属组及名称
		/**
		 * 定义一个job,并绑定到我们自定义的SimpleJob.class对象中
		 * 这里不会马上创建一个SimpleJob的实例,实例创建是在scheduler安排任务触发执行
		 * 这种机制也为后面使用Spring集成提供了便利
		 */
        JobDetail jobDetail = JobBuilder.newJob(SimpleJob.class).withIdentity("job9","group1").build();
	    
		//SimpleTrigger 实现Trigger接口的子接口,此处只指定了开始执行定时任务时间,使用默认的重复次数(0次)和重复间隔(0秒)
		SimpleTrigger simpleTrigger = (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("trigger9","group1").startAt(startDate).build();
		
		//添加jobDeatil到scheluder容器中去,并且和Trigger关联,返回执行时间
        // 告诉quartz使用定义的触发器trigger安排执行任务job
		Date date = scheduler.scheduleJob(jobDetail,simpleTrigger);
		System.out.println(jobDetail.getKey()+"will run at:"+date+" and repeat:"+simpleTrigger.getRepeatCount()+simpleTrigger.getRepeatInterval()/100L+" s");
//	job1结束	
		
//		job2开始
		jobDetail = JobBuilder.newJob(SimpleJob.class).withIdentity("job2","group1").build();
        simpleTrigger = (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("trigger2","group1").startAt(startDate).build();
        date = scheduler.scheduleJob(jobDetail,simpleTrigger);
        System.out.println(jobDetail.getKey() + " will run at: " + date + " and repeat: " + simpleTrigger.getRepeatCount()
                + " times, every " + simpleTrigger.getRepeatInterval() / 1000L + " seconds");

//job2结束	
        
//        job3开始
        //任务执行规则为在指定的时间开始进行执行,每十秒执行一次重复执行十次
		jobDetail = JobBuilder.newJob(SimpleJob.class).withIdentity("job3","group1").build();
        simpleTrigger = (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("trigger3","group1").startAt(startDate)
        		.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(10).withRepeatCount(10)).build();

        scheduler.scheduleJob(jobDetail,simpleTrigger);
        //forjob 指定trigger对应的定时任务,另外一种实现形式,此trigger和上面的trigger共同出发一个任务,各自均执行
        simpleTrigger = (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("trigger3","group1").startAt(startDate)
        		.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(10).withRepeatCount(10)).forJob(jobDetail).build();
        System.out.println(jobDetail.getKey() + " will run at: " + date + " and repeat: " + simpleTrigger.getRepeatCount()
                + " times, every " + simpleTrigger.getRepeatInterval() / 1000L + " seconds");
//        job3结束
        
//    job4开始
		 jobDetail = JobBuilder.newJob(SimpleJob.class).withIdentity("job4","group1").build();
		 simpleTrigger = (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("trigger4","group1").startAt(startDate)
	        		.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(10).withRepeatCount(5)).build();
	      date = scheduler.scheduleJob(jobDetail,simpleTrigger);
	      System.out.println(jobDetail.getKey() + " will run at: " + date + " and repeat: " + simpleTrigger.getRepeatCount()
	                + " times, every " + simpleTrigger.getRepeatInterval() / 1000L + " seconds");
//		job5开始
		jobDetail = JobBuilder.newJob(SimpleJob.class).withIdentity("job5","group1").build();
		simpleTrigger = (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("trigger5","group1").startAt(DateBuilder.futureDate(5,DateBuilder.IntervalUnit.MINUTE)).build();
	    date = scheduler.scheduleJob(jobDetail,simpleTrigger);
	    System.out.println(jobDetail.getKey() + " will run at: " + date + " and repeat: " + simpleTrigger.getRepeatCount()
                + " times, every " + simpleTrigger.getRepeatInterval() / 1000L + " seconds");
//	    job5结束
	    
//	job6结束
	    jobDetail = JobBuilder.newJob(SimpleJob.class).withIdentity("job6","group1").build();
	    simpleTrigger = (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("trigger6","group1").startAt(startDate)
        		.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(40).repeatForever()).build();	
	    date = scheduler.scheduleJob(jobDetail,simpleTrigger);
	    System.out.println(jobDetail.getKey() + " will run at: " + date + " and repeat: " + simpleTrigger.getRepeatCount()
                + " times, every " + simpleTrigger.getRepeatInterval() / 1000L + " seconds");
//	job6结束
	    //在scheduler.start()之后调用,可以重新定义trigger重新注册
System.out.println("-----------------Starting Scheduler-----------------");	    

	    scheduler.start();    
System.out.println("-----------------Starting Scheduler-----------------");	    
	    
//job7开始
jobDetail = JobBuilder.newJob(SimpleJob.class).withIdentity("job7","group1").build();
simpleTrigger = (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("trigger7","group1").startAt(startDate)
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMinutes(5).withRepeatCount(20)).build();
date = scheduler.scheduleJob(jobDetail,simpleTrigger);
System.out.println(jobDetail.getKey() + " will run at: " + date + " and repeat: " + simpleTrigger.getRepeatCount()
        + " times, every " + simpleTrigger.getRepeatInterval() / 1000L + " seconds");
//job7结束

//job8开始
//storeDurly(),没有触发器指向任务的时候,将任务保存在队列中,然后可以通过手动触发
jobDetail = JobBuilder.newJob(SimpleJob.class).withIdentity("job8","group1").storeDurably().build();
//任务立即执行
scheduler.addJob(jobDetail, true);
System.out.println("手动触发triggering job8.。。。。。");
scheduler.triggerJob(JobKey.jobKey("job8","group1"));
//job8结束

//启动任务调度程序,内部机制是线程的启动
scheduler.start();
try {
	Thread.sleep(60000L);
} catch (InterruptedException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

	//对job7重新安排    
	System.out.println("------------------Rescheduling-----------------");
	simpleTrigger = (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("trigger7","group1").startAt(startDate)
			.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMinutes(5).withRepeatCount(20)).build();  
	date = scheduler.scheduleJob(jobDetail,simpleTrigger);
	  System.out.println("job7 rescheduled to run at: " + date);
      System.out.println("------- Waiting five minutes... ------------");
      try {
          Thread.sleep(60000L);
      } catch (Exception ex) {
      }
	    
      //关闭任务调度程序,如果不关闭,调度程序schedule会一直运行着
      scheduler.shutdown(true);
      
      SchedulerMetaData metaData = scheduler.getMetaData();
      System.out.println("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");
	    
	}
	
	
	public static void main(String[] args) throws SchedulerException{
		SimpleTriggerDemo1 demo1 = new SimpleTriggerDemo1();
		demo1.run();
	}

}

运行结果如图所示:

 

使用 CronTrigger 来实现定时任务的代码如下:

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SchedulerMetaData;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class CronTriggerDemo {
	
	public void run() throws Exception{
		System.out.println("------------初始化----------");
		
		SchedulerFactory sf = new StdSchedulerFactory();
		Scheduler scheduler = sf.getScheduler();
		
		System.out.println("------------初始化完成----------");

		System.out.println("------------向scheduler加入job----------");
        SimpleDateFormat simpleDateFormat =  new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
        
        JobDetail jobDetail = JobBuilder.newJob(SimpleJob.class).withIdentity("job1","group1").build();
        
		CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("tirgger1", "group1")
				.withSchedule(CronScheduleBuilder.cronSchedule("0/20 * * * * ?")).build();
		
		Date date = scheduler.scheduleJob(jobDetail, trigger);
	    System.out.println(jobDetail.getKey() + " 已经在 : " + simpleDateFormat.format(date) + " 时运行,Cron表达式:" + trigger.getCronExpression());
	
	    System.out.println("--------------------------------shceduler调用开始----------------------------");

	    scheduler.start();
	    System.out.println("---------------------------------scheduler调用结束-------------------------");
	    
	    try
	    {
	      Thread.sleep(300000L);
	    }
	    catch (Exception e)
	    {
	    }
	 
	    System.out.println("------- 关闭Scheduler ---------------------");
	 
	    scheduler.shutdown(true);
	 
	    System.out.println("------- 关闭完成 -----------------");
	 
	    SchedulerMetaData metaData = scheduler.getMetaData();
	    System.out.println("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");


	}
	
	public static void main(String[] args) throws Exception{
		CronTriggerDemo cornTriggerDemo = new CronTriggerDemo();
		cornTriggerDemo.run();
	}

}

运行结果如图所示: 

以上两个demo 都是用 RAMJobStore 的存储方式

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值