Spring Scheduler를 활용한 일정 주기 스케줄링 작업

Spring Scheduler는 스케줄링 작업을 효과적으로 관리하고 실행하기 위한 방법입니다.

 

Scheduling 활성화 설정

Spring Scheduler는 `@Scheduled` 어노테이션을 붙여 사용할 수 있습니다.

`@Scheduled`를 사용하기 위해서는 `@EnableScheduling` 어노테이션을 명시해주어 Scheduling을 활성화할 수 있습니다. `@EnableScheduling`을 명시하는 방법에는 두 가지가 있습니다. 

 

방법1: @SpringBootApplication이 위치한 클래스 위에 명시하는 방법

@EnableScheduling
@SpringBootApplication
public class CovidHospApplication {
    public static void main(String[] args) {
        SpringApplication.run(CovidHospApplication.class, args);
    }
}

 

 

방법2: @Scheduled를 적용할 클래스 위에 명시하는 방법

@EnableScheduling
public class HospDataDownload {
    @Scheduled(cron = "0 0 3 * * *", zone = "Asia/Seoul")
    public void download() {
    	// 스케줄링 작업 코드
    }
    // ...
}

 

 

@Scheduled 어노테이션 속성

주요 속성으로는 cron, fixedRate/fixedDelay, zone이 있습니다. 

 

cron

`cron` 속성을 사용하여 언제 작업을 실행할지 정의할 수 있습니다. 

@Scheduled(cron = "30 5 * * * *") // 5분 30초
@Scheduled(cron = "0 * 12 * * *") // 12시 0~59분까지 매분 
@Scheduled(cron = "0 0/5 * * * *") // 0분에 시작해서 5분마다
@Scheduled(cron = "0 0 2/1 * * *") // 2시에 시작해서 1시간마다
@Scheduled(cron = "0 0/5 3 * * *") // 3시 0분부터 5분마다
@Scheduled(cron = "0 0 12-17 ? * SUN,SAT") // 일,토 12시부터 17시까지 정시마다
@Scheduled(cron = "0 30 12 28 * ?") // 아무요일, 매월 28일 12시 30분
  • 초, 분, 시, 일, 월, 주, (년)을 지정해 스케줄러를 동작시킵니다.
    • 초: 0 ~ 59
    • 분: 0 ~ 59
    • 시: 0 ~ 23
    • 일: 1 ~ 31
    • 월: 1 ~ 12
    • 주: 0 ~ 6 (일요일부터 토요일까지) 
    • 년: 1970 ~ 2099 (생략 가능)

cron 속성을 손쉽게 지정하는 웹 사이트 참고.

 

fixedRate 및 fixedDelay

  • `fixedRate`: 코드가 실행되고 고정된 간격마다 실행됩니다. 이전 작업이 완료되지 않으면 다음 작업이 실행되지 않습니다.
  • `fixedDelay`: 해당 코드가 실행되고 끝난 후 지정 시간 이후 다음 작업이 실행됩니다. 
@Scheduled(fixedRate = 1000)  // 1초마다
@Scheduled(fixedDelay = 1000) // 이전 작업이 완료된 후 1초 후

 

zone

스케줄러를 실행할 타임 존을 지정합니다. 기본값은 Local 시간대입니다.

@Scheduled(cron = "0 0 3 * * *", zone = "Asia/Seoul")