Post

Spring Boot Scheduler 설정

1. 스케쥴러 사용

Application 클레스에 @EnableScheduling Annotation을 추가하면 스케쥴러 기능을 사용할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
public class DemoApplication {

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

}

2. 속성

  • cron: cron 표현식을 지원한다. “초 분 시 일 월 주 (년)”으로 표현한다.
  • fixedDelay: milliseconds 단위로, 이전 작업이 끝난 시점으로부터 고정된 시간을 설정한다.
  • fixedDelayString: fixedDelay와 같은데 property의 value만 문자열로 넣는 것이다.
  • fixedRate: milliseconds 단위로, 이전 작업이 수행되기 시작한 시점으로부터 고정된 시간을 설정한다.
  • fixedRateString: fixedDelay와 같은데 property의 value만 문자열로 넣는 것이다.
  • initialDelay: 스케쥴러에서 메서드가 등록되자마자 수행하는 것이 아닌 초기 지연시간을 설정하는 것이다.
  • initialDelayString: 위와 마찬가지로 문자열로 값을 표현하겠다는 의미다.
  • zone: cron 표현식을 사용했을 때 사용할 time zone으로 따로 설정하지 않으면 기본적으로 서버의 time zone이다.

3. cron 속성 사용

1) cron 구성

******
초(0-59)분(0-59)시간(0-23)일(1-31)월(1-12)요일(0-7)
  • 요일에서 0과 7은 일요일이며, 1부터 월요일이고 6이 토요일이다.
  • CronMaker 사이트에서 cron 표현식을 생성할 수 있다.

2) 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;

@Component
public class Schedule {

    @Scheduled(cron = "0 0/1 * * * ?")
    public void cronRun() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("### Cron Run 1 Minutes : " + simpleDateFormat.format(new Date()));
    }
}

3) 결과

1
2
3
### Cron Run 1 Minutes : 2020-10-27 15:39:00
### Cron Run 1 Minutes : 2020-10-27 15:40:00
### Cron Run 1 Minutes : 2020-10-27 15:41:00

4. fixedDelay 속성 사용

1) 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;

@Component
public class Schedule {

    @Scheduled(fixedDelay = 5000)
    public void fixedDelayRun() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("### Fixed Delay Run 5 Seconds : " + simpleDateFormat.format(new Date()));
    }
}

2) 결과

1
2
3
4
5
6
7
### Fixed Delay Run 5 Seconds : 2020-10-27 15:55:17
### Fixed Delay Run 5 Seconds : 2020-10-27 15:55:22
### Fixed Delay Run 5 Seconds : 2020-10-27 15:55:27
### Fixed Delay Run 5 Seconds : 2020-10-27 15:55:32
### Fixed Delay Run 5 Seconds : 2020-10-27 15:55:37
### Fixed Delay Run 5 Seconds : 2020-10-27 15:55:42
### Fixed Delay Run 5 Seconds : 2020-10-27 15:55:47

[출처 및 참고]

This post is licensed under CC BY 4.0 by the author.