스프링 부트 스케줄링

dalBeen·2023년 9월 27일

스프링

목록 보기
3/14

스케줄링

어떤 작업에 대해서 지정된 기간 혹은 시간에 수행하도록 하는것

사용법

  1. Application 클래스에서 @EnableScheduling 어노테이션을 넣어서, 스케줄링 기능을 사용할 수 있는 상태로 만들어 준다.
@SpringBootApplication
@EnableScheduling
public class WeatherApplication {

	public static void main(String[] args) {
		SpringApplication.run(WeatherApplication.class, args);
	}
	
}
@Transactional
    @Scheduled(cron = "0 0 1 * * *")
    public void saveDateWeather(){
        dateWeatherRepository.save(getWeatherFromApi());
    }

스케줄 설정방법

조건

  • cron 표현식, fixedDelay, fixedRate 와 같은 실행 주기를 설정하는 옵션을 필수로 한 가지는 적용해야 한다.
  • @Scheduled 통해 수행되는 job 메소드는 return type이 void 여야하고, parmeter를 줄 수 없다는 제약이 있다.

설정 옵션

  • cron : 크론 표현식을 이용하여 스케줄링한다.
    @Scheduled(cron = "5 * * * * *")
    public void something() {
    }
  • zone : 스케줄링에 사용되는 시간의 타임존을 반영한다.
    @Scheduled(cron = "5 * * * * *", zone="Asia/Seoul")
    public void something() {
    }
  • fixedDelay / fixedDelayString: 이전 작업이 종료되고 다시 시작되는 시간을 설정한다.
    @Scheduled(fiexedDelay=1000L) // 이전 something() 수행 완료 후 1초 뒤에 다시 시작
    public void something() {
    }
  • fixedRate / fiexedRateString : 이전 작업의 종료 여부와 상관없이 설정된 시간 간격으로 반복한다.
    @Scheduled(fixedRate=1000L) // 매 1초마다 something() 수행
    public void something() {
    }
  • initialDelay / initialDelayString : Job을 처음 실행까지 초기 딜레이(대기) 시간 설정
    @Scheduled(initialDelay=1000)  // App 실행 완료 후 1초 후에 something 잡이 수행됨.
    public void something() {
    }

cron 사용방법에 대해서

  • 초/분/시/일/월/요일/년도(생략가능)
0-59
0-59
0-23
1-31
1-12 || JAN-DEC
요일 0-6 || SUN-SAT
연도 1970-2099

-* 모든 수
-? 조건 없음 (날짜와 요일에만 사용)
-- 범위(기간) 지정
-, 특정 여러 시간 지정
-/ 시작 시간과 반복 간격
-L 지정할 수 있는 범위의 마지막 값 (날짜와 요일에만사용)

예를들어

  • "0 0 14 * * *" : 매일 오후 2시
  • "0 5 1 ? 7 MON-WEB" : 매년 7월 월-수 1시 5분

cron과 같은 설정은 application.properties에 설정하여 수정시 application.properties만 바꾸게 하는 것이 바람직

scheduler.test=0 0 0 * * *
 @Scheduled(cron = "${scheduler.test}")
 public void Scheduling(){
profile
깊게 공부해보자

0개의 댓글