• Spring Boot @Scheduled 스케줄링 사용법

    2022. 4. 17.

    by. soonil

    프로젝트를 진행하던 중 특정 시간마다 동작하는 그런 로직이 필요해서 관련 정보를 찾던 중 스프링 부트에서 어노테이션으로 사용 가능한 것을 알고 한번 사용해 보았다.

     

    사용 방법은 간단했으며 크론식을 알고 있다면 더욱 편리하게 상용 가능하다.

     

    1. @Scheduled 어노테이션을 활성화

    package com.ssafy.FFP;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.scheduling.annotation.EnableScheduling;
    @SpringBootApplication
    @EnableScheduling
    public class FfpApplication {
    public static final String APPLICATION_LOCATIONS = "spring.config.location="
    + "classpath:application.properties,"
    + "classpath:security.yml";
    public static void main(String[] args) {
    new SpringApplicationBuilder(FfpApplication.class)
    .properties(APPLICATION_LOCATIONS)
    .run(args);
    }
    }

     위와 같은 @SpringBootApplication 어노테이션이 선언된 곳에 @EnableScheduling 어노테이션을 추가해 주면 스케줄링 기능을 활성화시킬 수 있다.

     

    2. @Scheduled 등록

    @RestController
    public class DatasetController {
    @Scheduled(cron = "0 0 4 * * *",zone = "Asia/Seoul")
    public void DatasetUpdate() { // 최근 4달 데이터 가져와서 새로 갱신하는 방식
    System.out.println(Service.DataUpdate());
    }
    @Scheduled(cron = "0 0 0/1 * * *",zone = "Asia/Seoul")
    public void Datasetadd() { // 실시간 데이터 추가
    Service.DataAdd();
    }
    @Scheduled(cron = "0 0 5 * * *",zone = "Asia/Seoul")
    public void AnalysisUpdate2() {
    AService.updateChartDB();
    }
    }

     위와 같이 사용하고 싶은 메서드 위에 @Scheduled 어노테이션을 추가하면 스케줄 등록이 되고 설정된 시간에 맞춰 실행한다.

     

    3. @Scheduled 옵션

    fixedDelay 이전 작업이 종료된 후 설정 시간만큼 기다린 후에 시작한다. (밀리세컨드)
    @Scheduled(fixedDelay = 1000)
    fixedRate 이전 작업이 종료되지 않아도 설정된 시간마다 시작한다. (밀리세컨드)
    @Scheduled(fixedRate = 1000)
    initialDelay 작업 시작 시, 설정된 시간만큼 기다린 후 시작한다. (밀리세컨드)
    @Scheduled(fixedRate = 1000, initialDelay = 2000)
    cron 원하는 시간대를 설정하여 작업을 실행한다.
    @Scheduled(cron = "* * * * * *")
    ((0-59), (0-59), 시간(0-23), (1-31), (1-12), 요일(1-7, 1:, 7:))
    zone 시간대를 설정 한다. 미설정 시 로컬 시간대가 적용된다.
    @Scheduled(cron = "* * * * * *", zone = "Asia/Seoul")

     

    728x90

    '공부 > BackEnd' 카테고리의 다른 글

    댓글