обновить триггер задания cron

У меня есть задание cron с несколькими триггерами, все триггеры были запланированы на интервал, скажем, 5 минут, теперь мне нужно обновить карту данных задания во время выполнения, для этого мне нужен этот конкретный триггер, который требует обновления, но я не могу получить этот конкретный триггер, я делаю что-то подобное

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)

Любая идея, как я могу получить этот конкретный триггер, который мне нужно обновить?


person Abs    schedule 12.08.2016    source источник


Ответы (2)


Попробуйте что-то вроде этого:

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

Он вернет все ваши запланированные триггеры. После их получения вы можете делать то, что вам нужно в JobDataMap.

Я предлагаю использовать знакомую идентификацию триггера, так легче найти конкретную во время выполнения.

person jpozorio    schedule 12.08.2016

Я сохранил имя триггера в базе данных, и когда мне нужно обновить этот триггер, я просто получаю этот триггер следующим образом:

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()
}
person Abs    schedule 14.08.2016