본문 바로가기
개발/Spring

[SpringBoot] Scheduler(스캐줄러) 사용하기, cron 표현식

by 코딩하는 흰둥이 2023. 5. 14.

매일 또는 일정한 간격을 가지고 동작을 해야 하는 기능이 있을 때 사용

Project Application Class 
@EnableScheduling // Scheduler 를 사용하기 위한 어노테이션
@SpringBootApplication
public class PracticeApplication {

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

}

 

 

TestScheduler
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;


@Component
public class TestScheduler {

    // 프로젝트가 시작되면 initialDelay 가 1초 뒤에 실행되고 그 뒤로 3초마다 fixedDelay 가 실행된다
    @Scheduled(fixedDelay = 3000 , initialDelay = 1000)
    public void test() throws Exception{
        LocalDateTime now = LocalDateTime.now();
        String formatter = now.format(DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm뷴 ss초"));

        System.err.println("스캐줄러 테스트 : "+formatter);
    }
}

 

 

실행

 

 

 

 

Cron(크론) 표현식
    @Scheduled(cron = "* * * * * *")
    public void test() throws Exception{
    ..
    ..
    ..
    
    
     *		*	 *	 *	 *	  *      *        
     초		분  	시  	일   	월  	요일  	년도(생략가능)

 

 

<!-- 매 시간 5분 마다 실행 예) 00:05, 00:10. 00:15.... -->
cron = "0 5 * * * *"

<!-- 5분 마다 실행 예) 00:08, 00:13. 00:18.... -->
cron = "0 0/5 * * * *"

<!-- 매 시간 45분 마다 실행 예) 01:45, 02:45. 03:45.... -->
cron = " 0 10 * * * * "		// 매 시간 45분마다

<!-- 45분 마다 실행 예) 00:45, 01:30, 02:15.... -->
cron = " 0 /10 * * * * "	// 45분 마다


<!-- 1시간 마다 실행 예) 01:00, 02:00, 03:00.... -->
cron = "0 0 0/1 * * *"

<!-- 매일 오후 15시마다 실행 예) 15:00 -->
cron = "0 0 15 * * *"

<!-- 2023년도만 매일 오전 01시마다 실행 예) 01:00 -->
cron = "0 0 1 * * * 2023"

<!-- 매일 18시00분-18시55분 사이에 5분 간격으로 실행 예) 18:00, 18:05.....18:55 -->
cron = "0 0/5 18 * * *"

<!-- 매달 1일 00시에 실행 -->
cron = "0 0 0 1 * *"

 

Scheduler 는 중간에 실행시키고 중지시키는 게 안 되는 건가 싶어서

Thread를 사용해야 하나 싶었는데 가능하다고 한다

다음엔 수동제어를 방법을 올려야겠다

댓글