quartz.net 状态保存

来源:互联网 发布:管家婆财务统计软件 编辑:程序博客网 时间:2024/06/06 13:57

refs:

http://wwwcomy.iteye.com/blog/1747040



@PersistJobDataAfterExecution  @DisallowConcurrentExecution  public class MyParaJob implements Job {      private int myCount = 0;      private static int myStaticCount = 0;        public static final String JOB_DATA_MAP_KEY = "key1";        public MyParaJob() {      }        @Override      public 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++;      }  }  



1.参数传递。使用job.getJobDataMap().put()方式向Job当中传递参数,JobDataMap类实际上最终继承了实现Map接口的"DirtyFlagMap"类,而DirtyFlagMap内部又保存了一个HashMap的引用,操作都是针对这个HashMap进行的。 


2.PersistJobDataAfterExecution这个注解的使用。JobDataMap的持久化,加上注解之后,每次执行完,JobDataMap都会被序列化,上次任务执行放入的值都会保存下来。 


3.DisallowConcurrentExecution 注解,加上这个注释之后可以防止多个任务同时并发这种事情发生。






原创粉丝点击