планирование загрузки пружины включить / отключить задачи на уровне метода - PullRequest
0 голосов
/ 17 апреля 2019

Я следую этому руководству, чтобы начать планирование задач при весенней загрузке https://spring.io/guides/gs/scheduling-tasks/.

Я хочу добавить больше методов для разных задач в одном классе, задаваясь вопросом, возможно ли включить / отключить задачи науровень метода через свойства и @ConditionalOnProperty, кажется, @ConditionalOnProperty работает только на уровне класса, а не на уровне метода (согласно приведенному ниже примеру кода, который не работает).Какие-нибудь альтернативные подходы?Или нужно создать другой класс, включающий в себя задачу два, чтобы отключить / включить их отдельно?

@Component    
public class SchedulingTasks {

    private static final Logger log =    LoggerFactory.getLogger(SchedulingTasks.class);

    @Scheduled(fixedRate = 50000)
    public void jobOne() {
        log.info("job one started at {}", LocalDateTime.now());
    }

    @Scheduled(fixedRate = 50000)
    @ConditionalOnProperty(name="job.two", havingValue="true")  
    public void jobTwo() {
        log.info("just two started at {}", LocalDateTime.now());
    }
}

1 Ответ

0 голосов
/ 17 апреля 2019

Вы можете применить @ConditionalOnProperty к методам, а также к типам, но похоже, что это относится только к методам, регистрирующим Бины (см. Документацию @Conditional).

Вы должны создать отдельные Бины, где вы можете управлять регистрацией с помощью @ConditionalOnProperty, а затем применить аннотацию @Scheduled к методу внутри Бина.

Пример:

@Slf4j
@Service
@ConditionalOnProperty(prefix = "schedule", name = {"job.one"}, havingValue = "true")
public class JobOneScheduler {

    @Scheduled(cron = "*/2 * * * * *")
    public void runJob() {
        log.debug( "Running job one... {}", LocalDateTime.now() );
    }
}


@Slf4j
@Service
@ConditionalOnProperty(prefix = "schedule", name = {"job.two"}, havingValue = "true")
public class JobTwoScheduler {
    @Scheduled(cron = "*/5 * * * * *")
    public void runJob() {
        log.debug( "Running job two... {}", LocalDateTime.now() );
    }
}

application.properties:

schedule.job.one=true
schedule.job.two=false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...