Java EE 7 планирует задачи в разных средах / уровнях - PullRequest
0 голосов
/ 28 мая 2018

Есть ли способ настроить определенное запланированное задание в разных средах и расписаниях?Например, та же запланированная задача «MyTask» должна выполняться в Integration and Production.В Production MyTask должен запускаться каждые 24 часа, а в Integration MyTask не должен запускаться вообще.В настоящее время мы сосредоточены на нативном механизме расписаний Java EE 7.Spring, Quartz - это дополнительные фреймворки / библиотеки, которые мы не хотим использовать (если это возможно).

Ответы [ 2 ]

0 голосов
/ 27 июля 2018

Существует несколько способов создания запланированной задачи в Java EE.Я думаю, что вам больше подходит использование ManagedScheduledExecutorService .

@ApplicationScoped
public class PeriodicTask {

    @Resource
    ManagedScheduledExecutorService mses;

    @Inject
    @Config("period")
    private int period;

    public void startJobs() {
        mses.scheduleAtFixedRate(this::task, 0, period, TimeUnit.MINUTES);
    }

    private void task() {
        ...
    }
    ...
}

Таким образом, вы можете, например, ввести значение конфигурации period в зависимости от работысреда.Если вам не нужно планировать задачу для конкретной среды, у вас может быть другой параметр конфигурации, чтобы избежать вызова scheduleAtFixedRate метода.

Единственное, что ожидает сделать, это вызвать startJobs метод.

0 голосов
/ 28 мая 2018

Если вы используете Spring, попробуйте @Scheduled("${cronEx}").Вы можете предоставить для каждой среды свою конфигурацию, определяющую значение cronEx.Например, вы можете получить значение cronEx через JNDI.Подробнее об этом: SO-Q & A и SO-Q & A .

Если вам нужно что-то более сложное, взгляните на проект QUARTZ: http://www.quartz-scheduler.org/ Это библиотека для планирования заданий.

...