http://blog.youkuaiyun.com/a67474506/article/details/38317119
JobDataMap可以用来保存任何需要传递给任务实例的对象(这些对象要求是可序列化的)
作业类
public class ColorJob implements Job{
private static final String FAVORITE_COLOR = "favorite color";
public static final String EXECUTION_COUNT = "count";
private int _counter = 1;
private JobDataMap jobDataMap;
public void execute(JobExecutionContext context)
throws JobExecutionException {
// TODO Auto-generated method stub
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
JobKey jobKey=context.getJobDetail().getKey();
this.jobDataMap=context.getJobDetail().getJobDataMap();
String favoriteColor=jobDataMap.getString("color");
int count=jobDataMap.getInt("count");
System.out.println("ColorJob:在"+sdf.format(new Date())+"执行"+jobKey+"\n"
+"color:"+favoriteColor+"\n"
+"第"+count+"次执行\n"+"成员变量_counter是第"+this._counter+"次 执行");
++count;
jobDataMap.put("count", count);
System.out.println(count);
this._counter+=1;
}
}
public class JobStateExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("------- 初始化 -------------------");
SchedulerFactory sf=new StdSchedulerFactory();
try {
Scheduler scheduler=sf.getScheduler();
System.out.println("------- 初始化完成 --------");
System.out.println("------- 向Scheduler加入Job ----------------");
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
//把一个小时按15分钟(参数多少就是多少)划分,在当前时间的下一个划分时间点执行
// Date triggerStartTime=DateBuilder.nextGivenMinuteDate(null, 10);
//当前时间指定多长时间之后运行
Date triggerStartTime=DateBuilder.futureDate(5,DateBuilder.IntervalUnit.SECOND);
//指定作业,即工作类
JobDetail job1=JobBuilder.newJob(ColorJob.class).withIdentity("job1", "group1").build();
//设置触发器
SimpleTrigger simpleTrigger1=TriggerBuilder.newTrigger().withIdentity("trigger", "group")
.startAt(triggerStartTime)//开始时间
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(5)//间隔5秒
.withRepeatCount(4)).build();//重复4次
//向 JobDataMap 中存入键/值对,那些数据对可在你的 Job 类中传递和进行访问
job1.getJobDataMap().put("color", "green");
job1.getJobDataMap().put("count", 1);
//调度器关联作业和触发器
Date schedulerTime1=scheduler.scheduleJob(job1, simpleTrigger1);
System.out.println(job1.getKey()+" 将在: "+dateFormat.format(schedulerTime1)+" 运行,重复 "
+simpleTrigger1.getRepeatCount()+" 次,每 "
+simpleTrigger1.getRepeatInterval()/ 1000L+" 秒执行一次");
//设置第二个作业
JobDetail job2 = JobBuilder.newJob(ColorJob.class).withIdentity("job2", "group1").build();
SimpleTrigger trigger2 = (SimpleTrigger)TriggerBuilder.newTrigger()
.withIdentity("trigger2", "group1")
.startAt(triggerStartTime)
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(5)
.withRepeatCount(4))
.build();
job2.getJobDataMap().put("color", "Red");
job2.getJobDataMap().put("count", 1);
Date scheduleTime2 = scheduler.scheduleJob(job2, trigger2);
System.out.println(job2.getKey().toString() + " 将在: "
+ dateFormat.format(scheduleTime2) + " 运行,重复 " + trigger2.getRepeatCount()
+ " 次,每 " + trigger2.getRepeatInterval() / 1000L + " 秒执行一次");
System.out.println("------- 开始Scheduler ----------------");
scheduler.start();
System.out.println("------- Scheduler调用job结束 -----------------");
try {
Thread.sleep(60000L);//睡眠一分钟
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("------- 关闭Scheduler ---------------------");
scheduler.shutdown(true);
System.out.println("------- 关闭完成 -----------------");
SchedulerMetaData metaData = scheduler.getMetaData();
System.out.println("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}