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

    2022. 4. 17.

    by. 순일

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

     

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

     

    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' 카테고리의 다른 글

    Spring Boot Spark Kmeans 알고리즘 사용법  (0) 2022.06.07
    Spring Boot Web Socket 실시간 알림  (0) 2022.02.21
    Spring Boot 복잡한 JSON 파싱  (0) 2022.02.13

    댓글