스프링부트 스케쥴러
스프링 부트에서는 스케쥴러가 사용이 가능하다. 따로 Maven
이나 Gradle
에서 dependency를 추가하지 않고 기본 요소로 탑재가 되어있다. 간단하게 어노테이션과 Task
를 정의하는 것만으로도 사용할 수 있는데, 이에 대해서 알아보자.
스케쥴러 ON
Application.java
1 | import org.springframework.boot.SpringApplication; |
스프링 스타터 프로젝트 생성 시 기본으로 생성되는 어플리케이션 소스코드이다. @EnableScheduling
어노테이션 추가를 통해 스케쥴러를 동작시키겠다는 정의를 내리는 부분이다.
스케쥴(task) 정의
이제 스케쥴을 정의해보자. 따로 패키지 위치는 상관없는 것으로 보인다.
ScheduleTasks.java
1 |
|
@Scheduled
어노테이션으로 해당 메서드가 스케쥴러에 의해 동작되는 것임을 알려주는 부분이다. 이 어노테이션은 현재 fixedRate
의 값이 지정되어 있고 이는 5초에 한번씩 동작하게끔 한다. 이외에도 특히 쓸만하다고 생각되는 것은 cron
이다. 리눅스 환경에서의 crontab
와 같은 부분이다.
단, crontab에서는 다섯자리 표현식이 가능했던 반면, Spring boot scheduler에서는 6자리 표현식만 허용된다.
1 |
cron
속성은 총 6자리로 이루어지고 일반적은 cron을 설정하듯이 작성해준다. 작성 후 서버를 재기동 하면 그 순간부터 스케쥴러가 돌기 시작하면서 사전에 정의된 메서드를 실행한다.
@Scheduled
어노테이션 속성은 cron
외에도 다음과 같은 것들이 있다. 더 다양한 속성이 있지만 두 가지만 살펴보도록 하자.
| 속성 | type | 설명 |
|———— |—— |——————————————————– |
| fixedDelay | int | invoke 완료 후 지정된 시간(milliseconds) 이후에 재실행 |
| fixedRate | int | 지정된 시간(milliseconds) 간격으로 실행 |
정리
스프링의 스케쥴러는 일반적인 리눅스의 crontab
사용보다도 더 간단해서 마음에 쏙 들었다. 하지만 너무 많은 스케쥴 task, 또는 과중한 스케쥴러는 어플리케이션에 지장을 줄 수도 있으니 적절하게 쓰는 것이 중요하다고 생각된다.
참조
install_url
to use ShareThis. Please set it in _config.yml
.