Spring Boot Scheduler
서버를 개발하다보면 데몬 형태로 주기적인 업무 처리가 필요 할 때가 있다.
그럴때 Spring Boot의 Scheduler를 사용하면 손쉽게 처리가 가능 하다.
필요한 annotation
1. @EnableScheduling: background task executor가 생성된다.
2. @Scheduled: 실제 scheduling task를 실행할 녀석들.
example)
1. main문에 @EnableScheduling 추가
설명)
- @EnableScheduling이 명시되면 정해진 일정대로 ScheduledThreadPoolExecutor에 의해 관리되는 Worker thread를 실행하여 스케쥴 작업을 처리 한다.
- 스케쥴을 관리할 org.springframework.scheduling.TaskScheduler 빈을 등록하는데 1번과 같이 단일 thread로 할 수도 있고 2번과 같이 multi thread를 사용할 수도 있다.
- 단일 thread로 @Async하는 방법도 있다.
2. Schedule task 작성
설명)
- method는 argument 없이 void 선언 되어야 함.
- fixedRate는 method 호출 interval을 의미.
- fixedDelay는 method 실행 완료후 interval을 의미.
- 이외에 cron으로 시간 설정을 세밀하게 조정 할 수 있는데 여기 참조.
그럴때 Spring Boot의 Scheduler를 사용하면 손쉽게 처리가 가능 하다.
필요한 annotation
1. @EnableScheduling: background task executor가 생성된다.
2. @Scheduled: 실제 scheduling task를 실행할 녀석들.
example)
1. main문에 @EnableScheduling 추가
@SpringBootApplication @EnableScheduling public class Application { public static void main(String[] args) { SpringApplication.run(Application.class); } /* 1. task in current thread */ @Bean public TaskScheduler taskScheduler() { return new ConcurrentTaskScheduler(); } /* 2. multi thread */ @Bean public TaskScheduler taskScheduler() { ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); taskScheduler.setPoolSize(10); return taskScheduler; } }
설명)
- @EnableScheduling이 명시되면 정해진 일정대로 ScheduledThreadPoolExecutor에 의해 관리되는 Worker thread를 실행하여 스케쥴 작업을 처리 한다.
- 스케쥴을 관리할 org.springframework.scheduling.TaskScheduler 빈을 등록하는데 1번과 같이 단일 thread로 할 수도 있고 2번과 같이 multi thread를 사용할 수도 있다.
- 단일 thread로 @Async하는 방법도 있다.
2. Schedule task 작성
@Component public class ScheduledTask { @Scheduled(fixedRate = 1000) public void reportCurrentTime() { System.out.println("Current time: " + Instant.now()); } }
설명)
- method는 argument 없이 void 선언 되어야 함.
- fixedRate는 method 호출 interval을 의미.
- fixedDelay는 method 실행 완료후 interval을 의미.
- 이외에 cron으로 시간 설정을 세밀하게 조정 할 수 있는데 여기 참조.
댓글
댓글 쓰기