Back-end/Spring-핵심& webMVC

비동기 처리를 위한 ThreadPoolTaskExcutor

prden 2021. 11. 14. 13:22

1. ThreadPoolTaskExcutor

스프링에서 제공해주는 클래스로 org.springframework.scheduling.concurrent패키지에 속하며 기본생성자 하나만 존재한다. 

이는 쓰레드풀을 이용하여 멀티쓰레드 구현을 쉽게 해주는 클래스이다. 

 

2. 관련 메서드

1) setCorePoolSize : corePoolSize값을 설정한다. 이는 동시에 실행시킬 쓰레드의 개수를 의미하며 default값은 1이다. 

2) setAllowCoreThreadTimeOut : 코어 쓰레드의 타임아웃을 허용할 것인지에 대한 세터 메서드로 true로 설정할 경우 코어 쓰레드는 10으로 설정했어도 일정시간(keepAliveSeconds)이 지나면 코어 쓰레드 개수가 줄어든다. default값은 false이다. 

3) setKeepAliveSecondsL 코어 쓰레드 타임아웃을 허용했을 경우 사용되는 설정값으로 이곳에서 설정된 시간이 지날 때까지 코어 쓰레드 풀의 쓰레드가 사용되지 않을 경우 해당 쓰레드는 terminate된다. defalut값은 60초이다. 

4) setMaxPoolSize : 쓰레드 풀의 최대 사이즈로 default값은 Integer.MAX이다. 

5) setQueueCapacity : 쓰레드 풀 큐의 사이즈, corePoolSize 개수를 넘어서는 task가 들어왔을 때 queue에 해당 task들이 쌓이게 된다. 최대로 maxPoolSize개수 만큼 쌓일 수 있다. default값은 Integer.MAX이다. 

 

3. SpringBoot에서 CoreApplication에 Bean으로 등록해주기 

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableAsync
public class CoreApplication {

    public static void main(String[] args) {
        try {
            SpringApplication.run(CoreApplication.class, args);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Bean
    public TaskExecutor taskExecutor() {
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        taskExecutor.setCorePoolSize(5);
        taskExecutor.setMaxPoolSize(10);
        taskExecutor.setQueueCapacity(100);
        return taskExecutor;
    }


    @Bean
    public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
        ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
        threadPoolTaskScheduler.setPoolSize(5);
        threadPoolTaskScheduler.setThreadNamePrefix("ThreadPoolTaskScheduler");
        return threadPoolTaskScheduler;
    }
}

 

참고자료 : https://keichee.tistory.com/382