자바 설정(Java Configuration) 관련 클래스에 @EnableScheduling 어노테이션을 추가하면 기능 사용가능
@SpringBootApplication
@EnableScheduling
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
기본적으로 모든 @Scheduled 작업은 Spring에 의해 생성된 한 개의 스레드 풀에서 실행된다. 그렇기 때문에 하나의 Scheduled가 돌고 있다면 그것이 다 끝나야 다음 Scheduled가 실행되는 문제가 있다.
이 때문에 Thread Pool 설정은 해주어야하며 방법은 다음과 같다
// SchedulerConfig.java 생성
@Configuration
public class SchedulerConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(10);
threadPoolTaskScheduler.setThreadNamePrefix("my-scheduled-task-pool-");
threadPoolTaskScheduler.initialize();
scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
}
}