IT/SPRING

[cron] spring 특정 시간에 작업 예약 하는 방법 : 시간 설정 @schedule(cron="")

나콘 2023. 5. 5. 18:47

[cron 시간 설정방법]

 

@schedule(cron="") 구문은 특정 시간에 실행할 작업을 예약하기 위해 프로그래밍에 사용되는 코드 스니펫이다 

"cron" 매개변수는 미리 정의된 구문을 기반으로 작업을 실행해야 하는 시간과 빈도를 지정하는 데 사용된다 

식은 6개의 필드를 사용하여 초, 분, 시간, 일, 월 및 요일 값을 지정한다.

 

 


 

 cron

:예약 빈도 및 타이밍을 정의

식은 6개의 필드를 사용하여 초, 분, 시간, 일, 월 및 요일 값을 지정 할 수 있다.

 

 

cron = "  * * * * * * " 6 자리 지정 가능

각 자리 마다

* 초(0-59),

* 분(0-59),

* 시간(0-23),

* 일(1-31),

* 월(1-12 또는 1월-12월),

* 요일(0-7 또는 SUN-SAT, 여기서 0과 7은 모두 일요일을 나타냄)

 

 

[예문]

@schedule(cron="0 0 17 * * ?" )

매월 매일, 매일 오후 5시에 작업 실행을 의미합니다.

물음표는 날짜 필드에 특정 지정값이 없을때 사용

 

 


 

 

그외에 기능

 

fixedDelay:

  • 하나의 실행 종료와 다음 실행 시작 사이의 고정 지연을 지정한다.
  • 예를 들어 @Scheduled(fixedDelay = 5000)는 이전 실행이 완료된 후 5초마다 작업을 실행한다

fixedRate:

  • 작업은 이전 실행이 완료되었는지 여부에 관계없이 지정된 속도로 실행된다
  • 작업이 실행되어야 하는 고정 속도를 지정한다.
  • 예를 들어 @Scheduled(fixedRate = 10000)는 10초마다 작업을 실행한다

initialDelay

  • : 작업을 처음 실행하기 전 지연 시간(밀리초)을 지정한다.
  • 예를 들어 @Scheduled(initialDelay = 10000)는 애플리케이션이 시작된 후 10초 후에 작업을 시작한다.

zone

  • : 작업이 실행되어야 하는 시간대를 지정한다.
  • 예를 들어 @Scheduled(cron = "0 30 18 * * ?", zone = "America/New_York")는 동부 시간대에서 매일 오후 6시 30분에 작업을 실행한다.

이러한 조건 중 하나 이상을 조합하여 작업의 예약 조건을 정의 할수 있다 .

 

 


 

[적용해보기]

 

 

  1. 먼저 프로젝트에 Spring Boot Starter 종속성을 추가해야 합니다. build.gradle 파일에 다음 코드를 추가할 수 있다. 
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
}
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class MyTask {

    @Scheduled(cron = "0 0 12 * * ?") // run at 12 PM every day
    public void runTask() {
        // add your task logic here
    }
}

 

이 예에서 MyTask 클래스는 cron 표현식 "0 0 17 * * ?"을 기반으로 매일 오후 5시에 실행되는 runTask()라는 메서드를 정의한다.

마지막으로 Spring Boot 애플리케이션에서 예약을 활성화해야 한다. 기본 Spring Boot 애플리케이션 클래스에 @EnableScheduling 주석을 추가하여 이를 수행할 수 있다 . 

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
public class MyApp {

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

 

 

 

 

혼자 공부중... 'ㅡ'

반응형