Search code examples
grailsquartz-schedulercrontrigger

update trigger of cron job


I have a cron job which has multiple triggers all triggers have been scheduled for the interval of lets say 5 min, now I need to update job data map at runtime, for that I need that particular trigger which requires to update but I am failing to get that particular trigger, I am doing something like that

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)

Any idea how can I get that particular trigger which I have to update?


Solution

  • I saved the trigger name in database, and when I need to update that trigger I simply fetch that trigger like this:

    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()
    }