Java/Spring

[Spring Boot - Java] Scheduler 사용해보기

logan.jeon 2023. 11. 10. 00:56
반응형

잡설...

code....
회사에서 Spring Boot로 Backend를 구성하는 중에 DB에 있는 데이터중에 5분? 10분?에 한번씩 현재 시간보다 이전 시간의 데이터를 지우는 배치작업이 필요한 경우가 생겼다...

간단하게는 리눅스에서 delete 쿼리를 DB에 직접 보내는 스크립트파일을 작성해서 contab에 매시간 10분마다 스크립트파일을 실행시키는 설정을 할 수도 있지만...내 로컬PC는...윈도우11인데...? 윈도우에도 리눅스의 crontab같은 스케쥴링 기능이 있긴 하지만 마우스로 하나하나 설정하기도 귀찮고...혼자 개발하나...? 물론 요즘 Backend를 혼자 개발하고 있기는 하지만서도...

개발서버에 배포도 하고!! 실제 운영서버에도 배포도 하고!! 그러면..그럴 때마다 crontab 설정을 하는것도 일이다...

그래서 혹시 Spring Boot에는 스케쥴링기능이 분명 있을거다...멍청한 나도 필요한데 나보다 더 똑똑한 사람들이 만든 Framework에 없을리가! 하는 마음으로 찾아봤더니..역시나 있었다...ㅎㅎ 좋다

물론 Spring Batch로 처리해도 되지만...그렇게까지 큰 작업이 아니니까...라이브러리 추가는 귀...


code

Application.java

  • Application에 @EnableScheduling 어노테이션을 추가
package com.logan.scheduler;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling    // <--- 
public class SchedulerApplication {

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

}

Component.java

  • Scheduling 작업 설정을 할 Component 클래스 생성 후 @Scheduled 어노테이션을 추가한 function 생성하고 작업 내용 작성
  • 본문에서는 간단하게 스케쥴링이 돌아가는 시간을 log로 출력해본다.
  • Scheduled 설정에 현재는 cron을 사용해서 시간을 지정해 주고 있지만,
    fixedDelay, fixedDelayString, fixedRate, fixedRateString 처럼 milliseconds로 설정 시간을 지정해 줄 수 있다.
  • fixedDelay 와 fixedRate 의 차이는...나중에
package com.logan.scheduler.components;

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
@Slf4j
public class SchedulerComponent {

    @Scheduled(cron = "0/5 * * * * *", zone = "Asia/Seoul")
    public void scheduleTaskFirst() {
        log.info("scheduleTaskFirst");
        log.info("현재 작업 시간 : " + new Date());
    }
}

출력 결과

  • 아래 log에서 처럼 매시간 매분 5초마다 시간을 찍어주고있다. (cron설정 참고)
반응형