간혹 개발하다가 일정 주기별로 메서드를 실행시켜주고 싶을 때가 있다.
나 또한 Open API를 일정 주기마다 받아와야하는 상황이 있었다. Spring에서 지원해주는 Scheduler
를 사용해서 일정 주기마다 메서드를 실행시켜보자.
Scheduler
는 기본적으로 org.springframework.scheduling
패키지에 있으므로 gradle
기준 다음과 같이 의존성을 추가하면 된다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
maven
의 경우 다음과 같다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
스케줄링 기능을 활성화하기 위해서 다음과 같이 configuration
클래스 혹은 지금처럼 애플리케이션 메인 클래스
에 @EnableScheduling
를 추가한다.
@EnableScheduling
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Component
public class ScheduledTasks {
}
기본적으로 @Component
를 사용해서 컴포넌트로 등록해도 되지만, @Component
를 내장하고 있는 @Service
와 같은 어노테이션들로도 등록이 가능하다.
스케쥴러를 이용하기 위해서는 여러가지 방법들이 있지만, 난 그중에서 보기쉽고 직관적인 @Scheduled
+ cron
문법을 사용해서 지정해 보겠다.
스케줄러가 적용된 메서드의 반환타입은
void
여야 합니다.
@Scheduled(cron = "0 0 0 * * *")
public void ScheduledTasksMethod() {
log.info("{}에 실행되었습니다.", formatter.format(LocalDateTime.now()));
}
참고로 위에서 사용한 0 0 0 * * *
은 매일 자정
이라는 뜻입니다.
이렇게 스케줄러를 사용해서 일정 주기마다 실행되는 메서드를 만들어 보았다. 크론 문법은 아직 미숙하기 때문에 더 파봐야겠다..