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 注解,加上这个注释之后可以防止多个任务同时并发这种事情发生。