Quartz:向Job传递数据
JobDetail job1 = newJob(MyJob.class).withIdentity("job1", "group1").build();
newJob
方法其实返回一个JobBuilder
实例,通过调用JobBuilder
的方法配置任务属性,最后调用build
方法返回构造的任务实例(任务实例实现了JobDetail
)。
每个任务其实都是一个实现了JobDetail
接口的实例,这个实例每次执行都会根据当初构造它的JobBuilder
配置的Class对象构造出一个新的实例。
JobDetail
接口有个getJobDataMap
方法能返回一个JobDataMap
对象,这个对象实现了Map接口。可以用来传递信息给Job
JobDataMap map = job1.getJobDataMap();
map.put("key", "value");
Job中如何拿到这些数据:通过Job
接口的execute
方法参数能获取到,若Job.execute(JobExecutionContext context){}
则:
JobDataMap map = context.getJobDetail().getJobDataMap();
System.out.println(map.get("key"))
JobDetail
只有一个,而实现Job
接口的带execute
方法的类的实例却有多个,具体也就是每次任务执行的时候会构造一个。