Quartz动态参数传递
参数传递
JobBuild创建jobDetail的时候,用setMapDate的方式,传递参数
然后可以再job类的描述,jobcontext中获得jobMapDate。
动态参数
思考?为什么普通的job中,运行的时候,数据是不变的?
因为触发器触动后,创建的是一个新的job实例,两个实例初始化的时候,并不会有参数共享的问题,
因为他们会自动重新初始化参数。
怎么动态设置?
很简单,防止内存中多个实例,防止同时修改,出现资源争夺,
二,进行参数共享设置。所以有以下两个注解
- @PersistJobDataAfterExecution 共享JobData在执行后
- @DisallowConcurrentExecution 不允许并发
简单Demo代码
package quartz.two;
import org.quartz.*;
/**
* @program: MybatisStudy
* @description: 普通job
* @author: cuteDog
* @create: 2019-03-10 22:57
**/
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
public class NormalJob implements Job {
public NormalJob() {
}
public String page;
public String ceshi;
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
dosay();
JobDataMap dataMap = jobExecutionContext.getJobDetail().getJobDataMap();
dataMap.put("page",page);
dataMap.put("ceshi",ceshi);
}
public void dosay(){
System.out.println("page:"+page);
System.out.println("ceshi:"+ceshi);
Integer pageInt = Integer.parseInt(page);
Integer ceshiInt=Integer.parseInt(ceshi);
pageInt++;
ceshiInt++;
page=pageInt.toString();
ceshi=ceshiInt.toString();
System.out.println(page+"******");
System.out.println(ceshi+"******");
}
public String getPage() {
return page;
}
public void setPage(String page) {
this.page = page;
}
public String getCeshi() {
return ceshi;
}
public void setCeshi(String ceshi) {
this.ceshi = ceshi;
}
}
package quartz.two;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
/**
* @program: MybatisStudy
* @description: 定时任务配置类
* @author: cuteDog
* @create: 2019-03-10 23:01
**/
public class QuartzConfig {
public static void main(String[] args) throws SchedulerException {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobDetail jobDetail = JobBuilder.newJob(NormalJob.class)
.withIdentity("创建一个动态改变参数job")
.withDescription("这是job描述")
.usingJobData("page", "12")
.usingJobData("ceshi", "11")
.build();
CronTrigger trigger = TriggerBuilder.newTrigger()
.withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ? *"))
// SimpleScheduleBuilder.simpleSchedule()
// .withIntervalInMilliseconds(2))
// .startNow()
// .usingJobData("page", "12")
// .usingJobData("ceshi", "11")
.build();
scheduler.scheduleJob(jobDetail,trigger);
scheduler.start();
//
}
}