Skip to content

Spring Scheduler

Dongsik Choi edited this page Jun 18, 2021 · 1 revision

Spring Scheduler

Spring Scheduler란 일정한 시간 간격 또는 일정한 시각에 특정 로직을 돌리기 위해 사용하는 것입니다.

Spring에는 Spring Scheduler와 Spring quartz 2가지 방식이 제공됩니다.

Scheduler에서 주의할 점은 aws와 spring 서버가 한국시간인지 체크해야합니다.

ex) java -jar -Duser.timezone=Asia/Seoul ./app.jar // 한국시간으로

Spring Scheduler

Spring을 사용한다면 따로 의존성이 필요하지 않고, @EnableScheduling 어노테이션을 Application 클래스에 붙여주면 됩니다. 그러면 Scheduled라는 어노테이션을 찾아 실행이 시작됩니다.

@EnableScheduling
@SpringBootApplication
public class Application() {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

일정 시간마다 메소드가 실행되기 때문에 void라는 자료형과(return 타입이 없기 때문에,) 파라미터를 받으면 안됩니다.(파라미터 값을 못 불러옵니다.)

수행할 메소드 위에 @Scheduled라는 어노테이션을 설정합니다.

@Scheduled(....)
public void scheduleTest() {
    System.out.println("1");
}

@Scheduled 옵션

  1. fixedRate : 이전에 실행된 Task의 시작시간으로 부터 정의된 시간만큼 지난 후 Task를 실행한다.(밀리세컨드 단위) ex) @Scheduled(fixedRate = 1000)

  2. fixedDelay : 이전에 실행된 Task의 종료시간으로 부터 정의된 시간만큼 지난 후 Task를 실행한다.(밀리세컨드 단위) ex) @Scheduled(fixedRate = 1000)

  3. cron 리눅스에서 사용되는 crontab과 같은 기능입니다. Spring Scheduler에서 가장 많이 사용되는 옵션입니다.

    cron 옵션

    Seconds 0 ~ 59
    Minutes 0 ~ 59
    Hours 0 ~ 23
    Day of Month 1 ~ 31
    Month 1 ~ 12
    Day of Week 1 ~ 7 (1 => 일요일, 7=> 토요일 / MON,SUN...)
    Years(optional) 1970 ~ 2099
    * 모든수를 의미, Minutes 위치에 사용될 경우 매분마다 라는 뜻
    ? Day of Month, Day of Week에만 사용 가능, 특별한 값이 없다는 뜻
    - 기간을 설정, Hour 위치에 10 - 12 라고 쓰면 10, 11, 12dp 동작하라는 뜻
    , 특정 시간을 설정. Day of Week 위치에 2, 4, 6 이라고 쓰면 월, 수, 금에만 동작하라는 뜻
    / 증가를 표현, Seconds 위치에 0/15로 설정되어 있으면, 0초에 시작해서 15초 간격으로 동작 하라는 뜻
    L Day Of Month 에서만 사용하며, 마지막 날의 의미 Day of Month 에 L로 설정되어 있으면 그달 의 마지막날에 실행하라는 의미
    W Day of Month 에만 사용하며, 가장 가까운 평일을 의미. 15W로 설정되어 있고 15일이 토요일 이며, 가장 가까운 평일인 14일 금요일에 실행, 15일이 일요일이면 16일 월요일에 실행된다. 15일이 평일이면 그날 그대로 실행됨
    LW L과 W를 결합하여 사용, 그달의 마지막 평일의 의미
    # Day of Week에 사용, 6#3 의 경우 3번째 주 금요일에 실행된다.

사용 예

0 0 12 * * * ==> 매일 12시에 실행

0 15 10 * * * ==> 매일 10시 15분에 실행

0 * 14 * * * ==> 매일 14시에 실행

0 0/5 14 18 * * * ==> 매일 14시, 18시에 시작해서 5분간격으로 실행

0 0-5 14 * * * ==> 매일 14시에 시작해서 0분동안 실행

ex) @Scheduled(cron = "0 14 14 * * *")

Spring Quartz

Quartz는 다양한 Java 애플리케이션에 통합 될 수있는 작업 스케줄링 라이브러리입니다.

설정

dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-quartz'
}
Clone this wiki locally