본문 바로가기
BE/Spring

스프링 스케줄러(@Scheduled) 사용하는 법

by cjsrhd94 2022. 6. 23.

스프링 스케줄러를 사용하는 법에 대해 알아보자.

 

@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

 

댓글