Quartz入门例子简介 从入门到菜鸟(四)
忙了两天 补充一下姿势。
这次讲Quartz中Job的参数传递和状态保存。
先贴代码,还是两个类:
任务定义: MyParaJob.java
//这两行注解。。。 极度坑爹,也是和2.0之前版本所不同的地方,务必注意 @NOTICE@PersistJobDataAfterExecution@DisallowConcurrentExecutionpublic class MyParaJob implements Job {private int myCount = 0;private static int myStaticCount = 0;public static final String JOB_DATA_MAP_KEY = "key1";public MyParaJob() {}@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {String jobName = context.getJobDetail().getKey().getName();SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");JobDataMap data = context.getJobDetail().getJobDataMap();int jobDataMapInt = data.getInt(JOB_DATA_MAP_KEY);// 这里注释的内容用于理解DisallowConcurrentExecution这个注解//if (jobDataMapInt == 11) {//try {//Thread.sleep(11000);//} catch (InterruptedException e) {//e.printStackTrace();//}//}System.out.println("任务Key:" + jobName + " 正在执行,执行时间: " + dateFormat.format(Calendar.getInstance().getTime()));System.out.println("***private成员变量为:" + myCount + ",static成员变量为:" + myStaticCount + ",JobDataMap保存的变量为:" + jobDataMapInt);myCount++;jobDataMapInt++;data.put(JOB_DATA_MAP_KEY, jobDataMapInt);myStaticCount++;}}public class QuartzParaTest {public static void main(String[] args) throws Throwable {SchedulerFactory factory = new StdSchedulerFactory();Scheduler scheduler = factory.getScheduler();Date runTime = DateBuilder.nextGivenSecondDate(null, 10);JobDetail job = JobBuilder.newJob(MyParaJob.class).withIdentity("job1", "group1").build();job.getJobDataMap().put(MyParaJob.JOB_DATA_MAP_KEY, 10);// 每隔五秒执行,重复4次Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).withRepeatCount(4)).startAt(runTime).build();scheduler.scheduleJob(job, trigger);// 再来个有状态的Job,如果为了看单次任务,下面这几句可以先注释掉job = JobBuilder.newJob(MyParaJob.class).withIdentity("job2", "group1").build();job.getJobDataMap().put(MyParaJob.JOB_DATA_MAP_KEY, -10);trigger = TriggerBuilder.newTrigger().withIdentity("trigger2", "group1").withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).withRepeatCount(4)).startAt(runTime).build();scheduler.scheduleJob(job, trigger);scheduler.start();try {Thread.sleep(35L * 1000L);} catch (Exception e) {}scheduler.shutdown(true);}}