Spring Boot Scheduler

서버를 개발하다보면 데몬 형태로 주기적인 업무 처리가 필요 할 때가 있다.
그럴때 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으로 시간 설정을 세밀하게 조정 할 수 있는데 여기 참조.

댓글

이 블로그의 인기 게시물

[Protocol] WIEGAND 통신

Orange for Oracle에서 한글 깨짐 해결책

[UI] GNB·LNB·SNB·FNB 용어 설명