![](/img/trans.png)
[英]Spring + Quartz - how to create different triggers for the same job method
[英]How to pass different values for the same key in a list of triggers to a job?
因此,我想將觸發器特定的值傳遞給作業。 似乎該值被覆蓋並導致最后一個值。
public void createControlTask(String name, String id, String freq) throws SchedulerException {
JobBuilder jobBuilder;
JobDetail jobDetail;
TriggerBuilder trigBuilder;
Trigger trigger = null;
Set<Trigger> triggerList = new HashSet<Trigger>();
String[] months = null;
String cronFreq;
//Get current year from properties file -- kavitha
String year = props.getProperty("task.year");
log.info("in createSchedulerTask() for : [" + name + "] id [" + id + "] freq [" + freq + "]");
// Consider the control only if the frequency is monthly, quarterly, semi-annually or annually
if ((freq != null) && !(freq.equals(Constants.AS_NEEDED))) {
jobBuilder = JobBuilder.newJob(QuraJob.class);
jobBuilder = jobBuilder.withIdentity(name + "_JOB", Constants.CONTROL_TASK);
jobBuilder = jobBuilder.usingJobData(Constants.NAME, name);
jobBuilder = jobBuilder.usingJobData(Constants.ID, id);
jobBuilder = jobBuilder.usingJobData(Constants.FREQUENCY, freq);
jobDetail = jobBuilder.build();
log.info("Job created -- [" + jobDetail.getKey() + "]");
if(freq.equals(Constants.MONTHLY)){
months = Constants.MONTHLY_PERIOD;
}
if(freq.equals(Constants.QUARTERLY)){
months = Constants.QUARTERLY_PERIOD;
}
if(freq.equals(Constants.ANNUAL)){
months = Constants.ANNUAL_PERIOD;
}
if(freq.equals(Constants.SEMI_ANNUALLY)){
months = Constants.SEMI_ANNUALLY_PERIOD;
}
for(int i = 0; i < months.length; i++){
cronFreq = props.getProperty(Constants.PID_CRON_CONTROLTASK + months[i]);
trigBuilder = TriggerBuilder.newTrigger();
trigBuilder = trigBuilder.withIdentity(name + "_TRIGGER_" + i, Constants.CONTROL_TASK);
trigBuilder = trigBuilder.startNow();
trigBuilder = trigBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cronFreq));
//Add year and month (Eg: "January-2016") as job data
**這是我將數據發送到作業的位置** jobDetail.getJobDataMap()。put(Constants.TASK_MONTH_YEAR,months [i] +“-” + year);
trigBuilder = trigBuilder.forJob(jobDetail);
trigger = trigBuilder.build();
//add the trigger to a list
triggerList.add(trigger);
}
if(triggerList.size() > 0){
//schedule the triggerlist to the job created, false -- if any of job & trigger id already exists, throws exception
scheduler.scheduleJob(jobDetail,triggerList,false);
}
}
else
log.info("Freq [" + freq + "] is not a schedulable value. So not scheduling a task for this control");
}
因此, context.getMergedJobDataMap()幫助了我。
我按如下方式添加特定於觸發器的作業數據(假設該語句處於循環中):
trigBuilder = trigBuilder.usingJobData(Constants.TASK_MONTH_YEAR, months[i]+"-"+year);
在JOB類中,獲取數據如下:
taskMonthYear = (String)context.getMergedJobDataMap().get(Constants.TASK_MONTH_YEAR);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.