2016-08-12 4 views
0

私はトリガを複数持っているcronジョブを持っていますが、すべてのトリガは5分と言われていますので、実行時にジョブデータマップを更新する必要があります。更新する必要がありますが、私はその特定のトリガーを取得するために失敗しています、私はそのcronジョブのトリガを更新する

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で必要なものを実行できます。

使い慣れたトリガーIDを使用することをお勧めします。実行時に特定のトリガーIDを見つけやすくなります。