프로그래밍/Java

spring boot cron 같은 스케쥴러 사용하기

소행성왕자 2022. 1. 11. 15:06
스케쥴링은 일련의 반복되는 행위를 자동으로 간편하게 작성할수 있다.
 
예를들면 리눅스 시스템의 cron 처럼.

스케쥴 기능 켜기

자바 설정에서 @EnableScheduling 추가하면 스케쥴 기능을 사용할수 있다.
 
main class 에 추가하자.
@SpringBootApplication
@EnableScheduling
public class DemoApplication {
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}
스케쥴 구현

@Scheduled 어노테이션을 사용하면 사용가능하며
실행주기는 cron, fixedDelay, fixedRate 라는 세개의 속성으로 지정할 수 있다.

cron 설정
 
*          *      *        *       *       *
초(0-59)   분(0-59)  시간(0-23)  일(1-31)  월(1-12)  요일(0-7) 
각 별 위치에 따라 주기를 다르게 설정 할 수 있다.
순서대로 초-분-시간-일-월-요일 순이다. 그리고 괄호 안의 숫자 범위 내로 별 대신 입력 할 수도 있다.
요일에서 0과 7은 일요일이며, 1부터 월요일이고 6이 토요일이다.

예)

매일 9시에 실행
 
0 * 9 * * *

2분마다 실행
 
00 */2 * * * *

 

import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class Scheduler {
   @Scheduled(cron = "0 * 9 * * *")
   public void cronJobSch() {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
      Date now = new Date();
      String strDate = sdf.format(now);
      System.out.println("Java cron job expression:: " + strDate);
   }
}

참고

application.properties  변수로 설정하고 싶으면 아래와 같이 한다.
@Scheduled(cron = "${test.schedule}")
    public void cronTest() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        Date now = new Date();
        String strDate = sdf.format(now);
        System.out.println("Java cron job expression:: " + strDate);
    }

기타

위 샘플 예제에서는 파라메타가 없다.

스케쥴러 사용할때에는 파라메타 없어야 한다고 한다.