Grails - параметр в кварцевом триггере
У меня есть следующая кварцевая работа, установленная через Quartz-плагин:
class UserMonthlyNotificationJob {
static triggers = {
cron name:'dailyTrigger', cronExpression: " ... "
cron name:'weeklyTrigger', cronExpression: " ... "
cron name:'monthlyTrigger', cronExpression: " ... "
}
def execute(){ ... }
}
Я хотел бы иметь возможность установить параметр в триггере, который будет доступен в execute
блок. Кажется, я не могу установить любую переменную в cron trigger
и custom trigger
требуют реализации Quartz Trigger interface
, что я не знаю, как сделать.
Любая помощь с благодарностью.
2 ответа
Решение
Сделайте свою работу реализующей StatefulJob, и тогда у вас будет доступ к JobExecutionContext, который имеет средство доступа к экземпляру Trigger. Если у вас есть свой собственный класс Trigger, это будет его примером.
Большое спасибо, это помогло. Вот как я в итоге использовал его:
import org.quartz.StatefulJob
import org.quartz.JobExecutionContext
class UserPeriodicalNotificationJob implements StatefulJob{
static triggers = {
cron name:'dailyTrigger', cronExpression: ConfigHolder.config.userDailyNotificationJob
cron name:'weeklyTrigger', cronExpression: ConfigHolder.config.userWeeklyNotificationJob
cron name:'monthlyTrigger', cronExpression: ConfigHolder.config.userMonthlyNotificationJob
}
void execute(JobExecutionContext context){
def triggerName = context.trigger.key
try {
switch (triggerName) {...}
}
catch(Exception) {...}
}
}