스프링 스케줄러를 사용하는 법에 대해 알아보자.
@Scheduled
우선 스프링 스케줄러를 사용하기 위해서 간단한 세팅을 해주어야 한다.
@Configuration
@EnableScheduling
public class ScheduledConfig {
}
1. 스케줄러 설정 클래스를 만들고, @EnableScheduling 어노테이션을 붙여준다.
@Scheduled(fixedDelay = 5, initialDelay = 3000)
public void helloWorld() {
System.out.println("Hello World");
}
2. 사용할 메서드 위에 @Scheduled 어노테이션을 붙이고, 언제 작업을 수행할지 속성을 설정한다.
속성
- cron : cron 표현식을 지원한다. (자세한 내용은 아래 따로 설명할 예정)
- fixedDelay : milliseconds 단위로, 이전 작업이 끝난 시점부터 고정된 시간을 설정한다. ex) fixedDelay = 3000
- fixedDelayString : fixedDelay와 같고, property의 value만 String으로 넣는다. ex) fixedDelay = "3000"
- fixedRate : milliseconds 단위로, 이전 작업이 시작된 시점부터 고정된 시간을 설정한다.
- fixedRateString : fixedRate와 같고, property의 value만 String으로 넣는다.
- initialDelay : 초기 지연시간을 설정한다.
- initialDelayString : initialDelay와 같고, property의 value만 String으로 넣는다.
- zone : cron 표현식을 사용할 때 사용하는 time zone이다. 따로 설정하지 않으면 서버의 time zone을 기본 값으로 가진다.
cron 표현식
// Service.class
@Scheduled(cron = "0 0 8,20 * * * *") // 매일 8시, 20시 스케줄러 실행
public Long serviceToRedis() {
// Service code...
}
cron 표현식은 스케줄러 시간을 세팅할 때 사용된다.
7개의 필드를 가지며, 맨 마지막 연도 필드는 생략가능하다.
필드명 | 허용되는 값의 범위 | 허용된 특수문자 |
초 (Seconds) | 0~59 | , - * / |
분 (Minutes) | 0~59 | , - * / |
시 (Hours) | 0~23 | , - * / |
일 (Day of month) | 1~31 | , - * / L W |
월 (Month) | 1~12 또는 JAN ~ DEC | , - * / |
요일 (Day of week) | 0~6 또는 SUN ~ SAT | , - * / L # |
년 (Year) | 1970 ~ 2099 | , - * / |
특수문자
- * : 모든 값을 뜻한다.
- ? : 특정한 값이 없음을 뜻한다.
- - : 범위를 뜻한다. ex) MON-WED
- , : 여러 값을 뜻한다.. ex) MON, WED
- / : 시작시간과 단위를 뜻한다. ex) 시작시간/단위
- L : 마지막 값을 지정한다. ex) 마지막 일, 마지막 요일
- W : 가장 가까운 평일
- # : 몇 번째 무슨 요일인지 지정 ex) 1#2 두번째주 월요일
사용예시
// cron example
"0 0 2 * * *" : 매일 02시
"0 0 08,20 * * *" : 매일 08시, 20시
"0 0-5 08 * * *" : 매일 08:00 부터 매 08:05까지 매 분
"0 30 08 * * MON-FRI" : 매주 월~금 08:30
"0 30 08 L * *" : 매월 마지막 날 08:30
"0 30 08 * * 6L" : 매월 마지막 금요일 08:30
"0 30 08 * * 6#4" : 매월 4째 금요일 아무 날이나 08:30
'BE > Spring' 카테고리의 다른 글
본인 확인은 어떤 layer에서 이루어져야 할까? (0) | 2022.07.22 |
---|---|
yaml 파일을 그룹으로 관리하기 (0) | 2022.07.09 |
Springboot에서 Redis Cache 적용하기 (0) | 2022.06.27 |
스프링 부트 실행 환경 분리 (0) | 2022.02.02 |
@PathVariable, @RequestParam는 각각 언제 사용해야 할까? (0) | 2022.01.20 |
댓글