스프링부트 스케쥴러

스프링 부트에서는 스케쥴러가 사용이 가능하다. 따로 Maven이나 Gradle에서 dependency를 추가하지 않고 기본 요소로 탑재가 되어있다. 간단하게 어노테이션과 Task를 정의하는 것만으로도 사용할 수 있는데, 이에 대해서 알아보자.

스케쥴러 ON

Application.java

1
2
3
4
5
6
7
8
9
10
11
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling // 이 부분 추가
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}

스프링 스타터 프로젝트 생성 시 기본으로 생성되는 어플리케이션 소스코드이다. @EnableScheduling 어노테이션 추가를 통해 스케쥴러를 동작시키겠다는 정의를 내리는 부분이다.

스케쥴(task) 정의

이제 스케쥴을 정의해보자. 따로 패키지 위치는 상관없는 것으로 보인다.

ScheduleTasks.java

1
2
3
4
5
6
7
8
9
10
11
12
13
@Component
public class ScheduledTasks {

private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class);

private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

/* 스케쥴 task 정의 */
@Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
log.info("The time is now {}", dateFormat.format(new Date()));
}
}

@Scheduled 어노테이션으로 해당 메서드가 스케쥴러에 의해 동작되는 것임을 알려주는 부분이다. 이 어노테이션은 현재 fixedRate의 값이 지정되어 있고 이는 5초에 한번씩 동작하게끔 한다. 이외에도 특히 쓸만하다고 생각되는 것은 cron이다. 리눅스 환경에서의 crontab와 같은 부분이다.

단, crontab에서는 다섯자리 표현식이 가능했던 반면, Spring boot scheduler에서는 6자리 표현식만 허용된다.

1
@Scheduled(cron="*/5 * * * * *")

cron 속성은 총 6자리로 이루어지고 일반적은 cron을 설정하듯이 작성해준다. 작성 후 서버를 재기동 하면 그 순간부터 스케쥴러가 돌기 시작하면서 사전에 정의된 메서드를 실행한다.

@Scheduled 어노테이션 속성은 cron 외에도 다음과 같은 것들이 있다. 더 다양한 속성이 있지만 두 가지만 살펴보도록 하자.

| 속성 | type | 설명 |
|———— |—— |——————————————————– |
| fixedDelay | int | invoke 완료 후 지정된 시간(milliseconds) 이후에 재실행 |
| fixedRate | int | 지정된 시간(milliseconds) 간격으로 실행 |

정리

스프링의 스케쥴러는 일반적인 리눅스의 crontab사용보다도 더 간단해서 마음에 쏙 들었다. 하지만 너무 많은 스케쥴 task, 또는 과중한 스케쥴러는 어플리케이션에 지장을 줄 수도 있으니 적절하게 쓰는 것이 중요하다고 생각된다.

참조

https://spring.io/guides/gs/scheduling-tasks/

Author

hwiVeloper

Posted on

2019-01-16

Updated on

2022-12-29

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

댓글

You forgot to set the shortname for Disqus. Please set it in _config.yml.