Spring @Scheduled аннотация

Как я могу динамически использовать аннотацию @Scheduled Spring?

CronTrigger(String expression, TimeZone timeZone)

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/support/CronTrigger.html#CronTrigger-java.lang.String-java.util.TimeZone-

Поскольку у меня есть несколько часовых поясов в базе данных, как я могу передавать их динамически?

Я пробовал это в своем коде:

TimeZone timezone = null;
String timezone1 = null;
public SchedulerBean(String timezone2) 
{
     this.timezone1 = timezone2;
  //constructor
}

@Scheduled(cron="0 0 8 * * ?", zone =timezone.getTimeZone(timezone1) ) //Error at this line
public void sendQuestionNotif() 
{
  //......code
}

Вот ошибка, которую я получаю,

*Type mismatch: cannot convert from TimeZone to String*

Помогите пожалуйста мне. Потому что я хочу запускать cron на основе часовых поясов. ТИА.


person Chandz    schedule 27.07.2015    source источник


Ответы (1)


Параметры аннотации не могут быть установлены динамически. Вы можете сделать это программно, как это

class Scheduler implements Runnable {
    public Scheduler(TaskScheduler scheduler, String timezone, String cron) {
        scheduler.schedule(this, new CronTrigger(cron, TimeZone.getTimeZone(timezone)));
    }

    @Override
    public void run() {
        //
    }
}
person Evgeniy Dorofeev    schedule 27.07.2015
comment
Большое спасибо. Если я использую ваш ответ, нужно ли мне по-прежнему использовать @Scheduled (cron = cronExpression, часовой пояс) в методе, который работает для меня на основе выражения cron? - person Chandz; 27.07.2015
comment
Нет, ты не знаешь. Но вы можете создать Scheduler как компонент из контекста. - person Evgeniy Dorofeev; 27.07.2015
comment
Можете ли вы предоставить решение, которое вы получили? это было бы очень полезно для меня и для других пользователей - person tiagocarvalho92; 10.11.2017