Spring
[ Springboot ] 주기적으로 실행 되는 Schedule 기능 사용하기
구티맨
2020. 5. 20. 16:55
@EnableScheduling
@SpringBootApplication
public class ScheduleApplication {
public static void main(String[] args) {
SpringApplication.run(ScheduleApplication.class, args);
}
}
먼저, background task executor 를 생성하기 위해 @EnableScheduling 을 추가합니다.
이 annotation 이 없으면, @Scheduled에 의해 task가 동작하지 않습니다.
@Component
@Log
public class ScheduledTasks {
@Scheduled(fixedDelay = 10000)
public void runEvery10Sec(){
log.info("runEvery10Sec");
}
@Scheduled(cron = "0 0 17 * * *")
public void runAt9EveryDay(){
log.info("runAt17EveryDay");
}
}
주기적으로 수행할 함수에 @Scheduled 를 추가하고, 어떤 주기로 동작할지에 따라 적절한 Property를 사용하면 됩니다.
fixedDelay는 고정된 주기(ms)에 마다 실행을 하고 cron은 cron표현식에 주기에 따라 실행을 합니다.
fixedDelay
고정된 딜레이 시간 마다 메서드를 호출( 딜레이 시간 측정은 함수 호출 종료 시점부터 )
fixedRate
고정된 딜레이 시간 마다 메서드를 호출( 딜레이 시간 측정은 함수 호출 시작 시점부터 )
위의 코드를 수행하면, 아래 로그와 같이 첫번째 함수는 10초 마다 실행을 하고, 두번째 함수는 매일 5시 정각에만 실행이 됩니다.
2020-05-20 16:53:01.781 INFO 24635 --- [ scheduling-1] com.example.schedule.ScheduledTasks : runEvery10Sec
2020-05-20 16:53:01.785 INFO 24635 --- [ main] c.example.schedule.ScheduleApplication : Started ScheduleApplication in 1.241 seconds (JVM running for 1.672)
2020-05-20 16:53:11.784 INFO 24635 --- [ scheduling-1] com.example.schedule.ScheduledTasks : runEvery10Sec
2020-05-20 16:53:21.786 INFO 24635 --- [ scheduling-1] com.example.schedule.ScheduledTasks : runEvery10Sec
2020-05-20 16:57:30.461 INFO 25081 --- [ main] c.example.schedule.ScheduleApplication : Started ScheduleApplication in 1.582 seconds (JVM running for 1.995)
2020-05-20 17:00:00.010 INFO 25081 --- [ scheduling-1] com.example.schedule.ScheduledTasks : runAt9EveryDay
Spring 에서 크론 표현식은 아래와 같습니다.
초 | 분 | 시 | 일 | 월 | 요일 |
0-59 | 0-59 | 0-23 | 1-31 | 1-12 | 0-6( 일요일-토요일 ) |
* * 9 * * * : 매일 9시의 매분 매초마다 실행
0 */5 * * * * : 5분 마다 실행( 5, 10, 15 분 ... )