hayu's 개발 일지

[TIL]240412 Spring Scheduler 본문

프레임워크/spring

[TIL]240412 Spring Scheduler

hayu00 2024. 4. 12. 21:39

Scheduler

  • 주기적으로 또는 특정 시간에 작업을 실행할 수 있도록 도와주는 도구이다.

→ 스프링 프레임워크에서 스케쥴러를 지원한다.

 

Spring Scheduler 특징

  • 추가적인 의존성이 불필요하다. (스프링 프레임워크의 기본 기능이다.)
  • 사용이 쉽다(@Component와 @Scheduled 에너테이션 추가로 사용한다.)
  • 1개의 Thread pool을 사용한다. → 스케쥴이 끝나야 다음 스케쥴 실행이 가능하다.

Spring Scheduler 사용 방법

@Scheduled

  • Spring Boot 에서 @Scheduled 을 사용하면 일정한 시간 간격으로, 혹은 특정 시간에 코드가 실행되도록 설정할 수 있다.

@Scheduled 사용법

Application Class에 @EnableScheduling 를 추가한다.

@SpringBootApplication
@EnableScheduling
public class MoitApplication {

    public static void main(String[] args) {
        SpringApplication.run(MoitApplication.class, args);
    }
}

스케쥴링 작업할 클래스를 만든다.

@Component
public class Scheduler {    
    @Scheduled(cron = "0 0 * * * *")/* 매시각 0분 */
    public void run() {       
      System.out.println("Hello World!"); //예시   
    }
}

@EnableScheduling 와 @Component 두개의 에너테이션을 사용하면 된다.

  • @Component 가 아니더라도 스프링 빈에 등록된 클래스여야 한다.(@service)

@Scheduled 규칙

  • 메서드는 void 타입으로 만든다.
  • 메서드는 매개변수를 사용할 수 없다.

Spring Scheduler 설정 옵션

fixedDelay

  • fixedDelay는 작업이 끝난 시점부터 시간을 카운트 한다.

fixedRate

  • fixedRate는 작업의 시작부터 시간을 카운트 한다.

corn 표현식

  • cron = 0 * * * * ? : 앞에서부터 초, 분, 시, 일, 월, 요일 (연도) 순으로 진행된다.

 

  • * : 모든 조건(매시, 매일, 매주처럼 사용)을 의미한다.
  • ? : 설정 값 없음(날짜와 요일에서만 사용 가능)을 의미한다.
  • - : 범위를 지정할 때 사용한다.
  • , : 여러 값을 지정할 때 사용한다.
  • / : 증분값, 즉 초기값과 증가치 설정에 사용한다.
  • L : 마지막, 지정할 수 있는 범위의 마지막 값 설정 시 사용한다.(날짜와 요일에서만 사용 가능하다.)
  • W : 가장 가까운 평일(weekly)을 설정할 때 사용한다.

예) 10W

10일이 평일일 때 : 10일에 실행

10일이 토요일일 때 : 가장 가까운 평일인 금요일(9일)에 실행

10일이 일요일일 때 : 가장 가까운 평일인 월요일(11일)에 실행

 

참고 자료

- https://king-ja.tistory.com/81

- https://yermi.tistory.com/entry/Spring-Batch%EC%99%80-Scheduler%EC%9D%98-%EC%B0%A8%EC%9D%B4-Spring-Scheduler-%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95

- https://dev-coco.tistory.com/176

- https://velog.io/@yeonii/Spring-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8A%A4%EC%BC%80%EC%A5%B4%EB%9F%AC-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0