Scheduler
- 일정한 시간간격 또는 일정한 시각에 특정 로직을 돌리기 위해서 사용한다.
- 추가적인 의존성 주입이 필요없다.
@Scheduler
만으로 가능하다.
- Scheduler를 사용하기 위해
@EnableScheduling
를 추가해주면 된다.
@EnableScheduling
@SpringBootApplication()
public class MonthSubApplication {
public static void main(String[] args) {
SpringApplication.run(MonthSubApplication.class, args);
}
}
- 사용하고자 하는 Method에
@Scheduled
를 붙여주어 사용할 수 있다.
- Method 는 반드시 void의 retuen 타입이어야한다.
- Method에는 Parameter를 가질 수 없다.
cron
or fixed~
로 자신이 원하는 주기마다 설정이 가능하다.
@Component
public class Scheduler {
private final ScheduledHandler seriesScheduledHandler;
private final Logger logger = LoggerFactory.getLogger(getClass());
public Scheduler(ScheduledHandler seriesScheduledHandler) {
this.seriesScheduledHandler = seriesScheduledHandler;
}
@Scheduled(cron = "0 0/10 * * * *") //cron 주기마다 아래 method가 실행된다.
public void changeSeriesStatus() {
seriesScheduledHandler.changeSeriesStatus();
}
}
Scheduler의 비동기(Async) 처리
- Default로 Scheduler는 동기처리를 기본으로 한다.
단일 thread
로 동작하기 때문에 만약 원하는 주기마다 실행이 되지 않을 수 있다.
- 이를 해결하기 위해
비동기적
으로 스레드를 구성해준다.
- Async를 사용하기 위해
@EnableAsync
를 추가해준다.
@EnableAsync
@EnableScheduling
@SpringBootApplication()
public class MonthSubApplication {}