Как условно включить или отключить запланированные задания в Spring?

Я определяю запланированные задания с шаблонами стиля крона в Spring, с помощью @Scheduled аннотация.

Шаблон крона хранится в файле свойств конфигурации. На самом деле существует два файла свойств: одна конфигурация по умолчанию и одна конфигурация профиля, которая является зависимым среды (например, dev, тест, клиент напоминания 1, клиент напоминания 2 и т.д.) и переопределяет некоторые значения по умолчанию.

Я настроил боб заполнителя свойства в своем пружинном контексте, который позволяет мне использовать ${} разработайте заполнителей для импорта значений из моих файлов свойств.

Бобы задания похожи на это:

@Component
public class ImagesPurgeJob implements Job {

    private Logger logger = Logger.getLogger(this.getClass());

    @Override
    @Transactional(readOnly=true)
    @Scheduled(cron = "${jobs.mediafiles.imagesPurgeJob.schedule}")
    public void execute() {
        //Do something
            //can use DAO or other autowired beans here
    }
}

Соответствующие части моего контекста XML:

<!-- Enable configuration of scheduled tasks via annotations -->
    <task:annotation-driven/>

<!-- Load configuration files and allow '${}' style placeholders -->
    <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:config/default-config.properties</value>
                <value>classpath:config/environment-config.properties</value>
            </list>
        </property>
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
        <property name="ignoreResourceNotFound" value="false"/>
    </bean>

Мне действительно нравится это. Это довольно просто и чисто с минимальным XML.

Однако у меня есть еще одно требование: некоторые из этих заданий могут быть полностью отключены в некоторых случаях.

Так, прежде чем я использовал Spring для управления ими, я создал их вручную и существует булев параметр наряду с параметром крона в файлах конфигурации, чтобы указать, должно ли задание быть включено или нет:

jobs.mediafiles.imagesPurgeJob.enable=true or false
jobs.mediafiles.imagesPurgeJob.schedule=0 0 0/12 * * ?

Как я могу использовать этот параметр в Spring, чтобы условно создать или просто явно проигнорировать боб, в зависимости от этого параметра конфигурации?

Одно очевидное обходное решение должно было бы определить шаблон крона, который никогда не будет оценивать, таким образом, задание никогда не будет выполняться. Но боб был бы все еще создан, и конфигурация будет немного неясна, таким образом, я буду чувствовать, что должно быть лучшее решение.

59
задан 11 September 2018 в 14:19

1 ответ

Самый эффективный способ отключить @Scheduled в Spring. Просто выражение старой карги набора как "-". Это отключит @Scheduled.

@Scheduled(cron = "-")
public void autoEvictAllCache() {
    LOGGER.info("Refresing the Cache Start :: " + new Date());
    activeMQUtility.sendToTopicCacheEviction("ALL");
    LOGGER.info("Refresing the Cache Complete :: " + new Date());
}

Для большего количества информации:

enter image description here

3
ответ дан 1 November 2019 в 12:18

Другие вопросы по тегам:

Похожие вопросы: