簡體   English   中英

如何為作業的觸發器列表中的同一鍵傳遞不同的值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM