학습 배경
프로젝트 중에 매일 밤 자정에 알아서 체크하고 변경하는 기능이 필요했다. 뭔가 액션이 없어도 되는 자동 같은 느낌으로! 그래서 알아보던 중 @Scheduler를 이용하면 된다고 해서 여기저기 서치해 보았다.
Scheduler 란?
일정한 시간간격 또는 일정한 시각에 특정 로직을 돌리기 위해서 사용하는 것으로 Spring Boot starter에 기본적으로 의존되어 있다.
필수 @
공부하다 보니까 사람들마다 코드를 구현 한게 조금씩 달랐다. 그러나 그들이 공통적으로 사용하는 어노테이션이 있었고 나도 해당 어노테이션을 이용하여 스케줄링을 구현했다!
@EnableScheduling
이 어노테이션은 스프링 애플리케이션 내에서 스케줄링을 활성화시키는 데 사용된다.
아래처럼 class 위에 선언해주고 클래스 안에 스케줄링 메서드를 구현해주면 된다.
@EnableScheduling
public class SchedulingConfig {
// 여기에 스케줄링된 작업을 정의할 메서드들을 추가
}
@Component
이 어노테이션은 클래스 (여기서는 MatchingScheduler) 가 Spring 컨테이너에서 빈으로 등록되도록 한다.
@EnableScheduling
@Component
public class MatchingScheduler {
public static void main(String[] args) {
}
}
@Scheduled
이 어노테이션은 메서드가 주어진 표현식에 따라 스케줄링되도록 설정하는 것이다.
@EnableScheduling
@Component
public class MatchingScheduler {
@Scheduled(cron = "0 0 * * * ?")
public void combinedMethod() {
}
}
@Scheduled 작성 규칙
- Method는 void 타입으로 해야 한다.
- Method는 매개변수 사용이 불가능하다.
@Scheduled 옵션
fixedDelay | 이전 작업이 종료된 후 설정 시간만큼 기다린 후에 시작한다. (밀리세컨드) @Scheduled(fixedDelay = 1000) |
fixedRate | 이전 작업이 종료되지 않아도 설정된 시간마다 시작한다. (밀리세컨드) @Scheduled(fixedRate = 1000) |
initialDelay | 작업 시작 시, 설정된 시간만큼 기다린 후 시작한다. (밀리세컨드) @Scheduled(fixedRate = 1000, initialDelay = 2000) |
cron | 원하는 시간대를 설정하여 작업을 실행한다. @Scheduled(cron = "* * * * * *") (초(0-59), 분(0-59), 시간(0-23), 일(1-31), 월(1-12), 요일(1-7, 1:일, 7:토)) |
zone | 시간대를 설정 한다. 미설정 시 로컬 시간대가 적용된다. @Scheduled(cron = "* * * * * *", zone = "Asia/Seoul") |
'spring 스프링' 카테고리의 다른 글
스프링 빈(Spring Bean)이란? (0) | 2023.08.21 |
---|---|
제어의 역전 (IOC, Inversion Of Control) (0) | 2023.08.20 |
Spring Boot 초기 데이터 설정 방법 정리(data.sql, schema.sql) (0) | 2023.08.09 |
application.properties 의 값을 불러와 사용하기 (0) | 2023.08.07 |
[JAVA] Gson 라이브러리 JsonParser() is deprecated (0) | 2023.08.01 |