更新 cron 作业的触发器
update trigger of cron job
我有一个 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)
知道如何获得我必须更新的特定触发器吗?
尝试这样的事情:
List<Trigger> triggers = quartzScheduler.jobGroupNames.collect {
quartzScheduler.getJobKeys(GroupMatcher.groupEquals(it)).collect {
quartzScheduler.getTriggersOfJob(it)
}
}.flatten()
它会 return 您所有预定的触发器。得到它们后,您可以在 JobDataMap 中执行所需的操作。
我建议使用熟悉的触发器标识,这样可以更容易地在运行时找到特定的触发器。
我将触发器名称保存在数据库中,当我需要更新该触发器时,我只需像这样获取该触发器:
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()
}
我有一个 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)
知道如何获得我必须更新的特定触发器吗?
尝试这样的事情:
List<Trigger> triggers = quartzScheduler.jobGroupNames.collect {
quartzScheduler.getJobKeys(GroupMatcher.groupEquals(it)).collect {
quartzScheduler.getTriggersOfJob(it)
}
}.flatten()
它会 return 您所有预定的触发器。得到它们后,您可以在 JobDataMap 中执行所需的操作。
我建议使用熟悉的触发器标识,这样可以更容易地在运行时找到特定的触发器。
我将触发器名称保存在数据库中,当我需要更新该触发器时,我只需像这样获取该触发器:
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()
}