2016-08-12 73 views
0

我有一個cron作業,它有多個觸發器,所有的觸發器已經安排了5分鐘的時間間隔,現在我需要在運行時更新作業數據映射,因爲我需要那個特定的觸發器需要更新,但我沒能得到那個特定的觸發,我在做類似的東西cron job的更新觸發器

String cronExpression = "0 0/5 * * * ?" 
String triggername = "mytrigger" + System.currentTimeMillis() 
JobDataMap jobDataMap = new JobDataMap([host: config.host, port: config.port, username: config.username, password: config.password]) 
CronTrigger trigger = TriggerBuilder.newTrigger() 
     .withIdentity(triggername) 
     .withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)).usingJobData(jobDataMap) 
     .build() 
MyJob.schedule(trigger) 

任何想法,我怎麼可以得到的,我有特別的觸發更新?

回答

0

我在數據庫中保存的觸發器名字,當我需要更新觸發我只是獲取該觸發器是這樣的:

TriggerKey triggerKey = new TriggerKey(triggerName_from_db); 
try { 
    Trigger trigger = quartzScheduler.getTrigger(triggerKey) 
    if (trigger?.key?.name) { 
     trigger.jobDataMap['host'] = config.host 
     trigger.jobDataMap['port'] = config.port 
     trigger.jobDataMap['username'] = config.username 
     trigger.jobDataMap['password'] = config.password 
    } 
    quartzScheduler.rescheduleJob(triggerKey, trigger) 
    }catch (SchedulerException ex) { 
    log.error ex.toString() 
} 
0

嘗試類似的東西:

List<Trigger> triggers = quartzScheduler.jobGroupNames.collect { 
    quartzScheduler.getJobKeys(GroupMatcher.groupEquals(it)).collect { 
     quartzScheduler.getTriggersOfJob(it) 
    } 
}.flatten() 

這將返回所有調度觸發器。得到它們後,您可以在JobDataMap中執行所需的操作。

我建議使用熟悉的觸發器標識,在運行時更容易找到特定的觸發器標識。