Spring-boot 주기적으로 코드 실행하기 @Scheduled

스프링 부트에서 일정 시간 주기적으로 작업하는 스케쥴러를 만들어보려고 한다

@EnableScheduling 추가하기

  • @EnableScheduling 주석은 응용 프로그램의 스케줄러를 활성화하는 데 사용된다
  • 기본 스프링 부트 애플리케이션 클래스 파일에 추가해야 한다
1
2
3
4
5
6
7
@SpringBootApplication
@EnableScheduling
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}

주기설정

crontab 방식으로 주기를 설정할때 표현식은 아래링크를 참고
https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm

@Scheduled 추가하기

  • @Scheduled 특정 기간 스케줄러를 트리거하는 데 사용한다
1
2
3
@Scheduled(cron = "0 * 9 * * ?")
public void cronJobSch() throws Exception {
}

아래 예제는 매일 오전 9 시부 터 오전 9시 59 분까지 매분마다 작업을 실행하는 방법을 보여주는 샘플 코드이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class Scheduler {
@Scheduled(cron = "0 * 9 * * ?")
public void cronJobSch() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date now = new Date();
String strDate = sdf.format(now);
System.out.println("Java cron job expression:: " + strDate);
}
}

@Scheduled fixedRate 고정된 주기로 실행하기

  • @Scheduled(fixedRate = 1000) 처럼 사용하면 특정 주기로 실행가능하다
  • 완료되는것을 기다리지 않고 실행한다
  • 단위는 ms
1
2
3
@Scheduled(fixedRate = 1000)
public void fixedRateSch() {
}
  • 아래와 같이 구현할 경우 이전 작업이 완료 될 때까지 기다린다
1
2
3
@Scheduled(fixedDelay = 1000, initialDelay = 1000)
public void fixedDelaySch() {
}

Comments