Spring Framework에서 제공하는 어노테이션 중 하나로, 주기적인 작업을 수행하기 위한 메서드에 적용한다.
이 어노테이션을 사용하면 메서드를 주기적으로 실행 할 수 있다.
1. 의존성 추가 : 스프링 부트 프로젝트의 경우 spring-boot-starter에 spring-boot-starter-data-jpa 의존성을 추가하면 스케줄링을 위한 기본 설정이 포함된다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
// 다른 의존성들...
}
2. @EnableScheduling 어노테이션 사용: @EnableScheduling 어노테이션을 사용하여 스케줄링을 활성화가 된다. 이 어노테이션은 @SpringBootApplication 클래스나 그와 유사한 설정 클래스에 추가된다.
@SpringBootApplication
@EnableScheduling
public class YourApplication {
public static void main(String[] args) {
SpringApplication.run(YourApplication.class, args);
}
}
3. @Scheduled 어노테이션 적용: 주기적으로 실행할 메서드에 @Scheduled 어노테이션을 적용합니다. 이 어노테이션에는 cron 표현식이나 고정된 간격(fixedRate, fixedDelay, initialDelay 등)을 사용하여 스케줄링이 수행됩니다.
@Scheduled(fixedDelay = 1000) // 1초마다 실행, milliseconds 단위로, 이전 Task의 종료 시점으로부터 정의된 시간만큼 지난 후 Task를 실행한다.
public void run() {
System.out.println("Hello");
}
@Scheduled(fixedDelay = "1000") // fixedDelay 와 같지만 문자열로 값을 표현
public void run() {
System.out.println("Hello");
}
@Scheduled(fixedRate = 1000) // milliseconds 단위로, 이전 Task의 시작 시점으로부터 정의된 시간만큼 지난 후 Task 실행
public void run() {
System.out.println("Hello");
}
@Scheduled(fixedRateString = "1000") // fixedRate와 같지만 문자열로 값을 표현
public void run() {
System.out.println("Hello");
}
fixedRate : 작업 수행시간과 상관없이 일정 주기마다 메소드를 호출하는 것
fixedDelay : (작업수행 시간을 포함하여) 작업을 마친 후부터 주기 타이머가 돌아 메소드를 호출하는 것
initialDelay : 스케줄러에서 메소드가 등록되자마자 수행하는 것이 아닌 초기 지연시간을 설정하는 것
@Scheduled(fixedRate = 5000, initialDelay = 3000) // 3초 대기시간 (initialDelay) 후에 5초(fixedRate) 마다 "Hello" 를 출력
public void run() {
System.out.println("Hello");
}
initialDelayString : 위와 마차가지로 문자열로 값을 표현하는 것
@Scheduled(fixedRate = 5000, initialDelayString = "3000")
public void run() {
System.out.println("Hello CoCo World!");
}
Cron 표현식을 사용하여 작업을 예약
(6자리 설정만 허용하며 연도 설정은 할 수 없다.)
@Scheduled(cron = "* * * * * *")
public void run() {
System.out.println("Hello");
}
첫 번째 * 부터
초 (0-59)
분 (0-59)
시간 (0-23)
일 (1-31)
월 (1-12)
요일 (0-6) (0:일 - 6:토)
? : 설정 값 없음 (날짜와 요일에서만 사용 가능)
- : 범위를 지정할 때
, : 여러값을 지정할 때
/ : 증분값, 즉 초기값과 증가치 설정에 사용
L : 마지막 - 지정할 수 있는 범위의 마지막 값 설정 시 사용 (날짜와 요일에서만 사용 가능)
W : 가장 가까운 평일을 설정할 때
예) 10W
- 10일이 평일 일 때 : 10일에 실행
- 10일이 토요일 일때 : 가장 가까운 평일인 금요일(9일)에 실행
- 10일이 일요일 일 때 : 가장 가까운 평일인 월요일(11일)에 실행
#: N번째 주 특정 요일을 설정할 때 (-요일에서만 사용 가능)
예) 4#2
- 목요일 #2째주에 실행
zone : cron 표현식을 사용했을 때 사용할 time zone 으로 따로 설정하지 않으면 기본적으로 Local의 time zone 이다.
@Scheduled(cron = "* * * * * *", zone = "Asia/Seoul")
public void run() {
System.out.println("Hello");
}
테스트코드 작성(기초) (0) | 2024.01.24 |
---|---|
테스트코드 작성 시 Autowired, Mock이란 무엇인가 (1) | 2023.12.28 |
parameter 전송 및 받아오기 (0) | 2023.12.15 |
깃허브 pull 후 내 코드와 병합하는 과정 (0) | 2023.12.12 |
Spring이 제공하는 Validation이란? (1) | 2023.12.06 |