Чаще всего мы используем аннотацию @Scheduled из Spring Framework передавая ей фиксированные значения. Примерно так:
1 2 3 4 5 6 7 8 9 |
@Scheduled(fixedDelay = 30000L, initialDelay = 20L) public void someMethodFixedDelay() { System.out.println("some work"); } @Scheduled(fixedRate = 20000L, initialDelay = 100L) public void someMethodFixedRate() { System.out.println("fixed rate"); } |
В старых версиях Spring Framework не было никакой возможности параметризировать передаваемые значения. Можно было только передавать константы, зашитые в коде.
Начиная с версии Spring Framework 3.2.2 мы можем использовать property placeholder-ы:
1 2 3 4 5 6 7 8 9 |
@Scheduled(fixedDelayString = "${my.fixed.delay}", initialDelayString = "${my.initial.delay}") public void someMethodFixedDelay() { System.out.println("some work"); } @Scheduled(fixedRateString = "${my.fixed.rate}", initialDelayString = "${my.initial.delay}") public void someMethodFixedRate() { System.out.println("fixed rate"); } |
Сами значения my.fixed.delay, my.initial.delay и my.fixed.rate должны быть загружены из property файлов. Их, например, можно указать в “application.properties” от Spring Boot. Или загрузить из конкретного файла:
1 2 3 4 |
@Configuration @PropertySource("classpath:root/test.props") public class SampleConfig { ... |
Еще можно определять интервалы запуска с помощью cron.
Например запуск каждые 30 минут:
@Scheduled(cron=»*/30 * * * * *»)
Документация — https://docs.spring.io/spring/docs/4.3.13.RELEASE/spring-framework-reference/htmlsingle/#scheduling-annotation-support-scheduled