티스토리 뷰

 

Spring Boot에서 기본적으로 모든 @Scheduled 작업은 Spring에 의해 생성된 Thread pool 개수는 1개이다. 하나의 Scheduled이 돌고 있으면 다 끝나야 다음 Scheduled이 실행된다.

아래 로그를 추가하여 확인이 가능하다.

logger.info("Current Thread : {}", Thread.currentThread().getName());

 

Spring Boot에서 설정을 통해 모든 작업을 실행하기 위해 스레드 풀을 사용하도록 아래와 같이 구성할 수 있다.

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;

@Configuration
public class SchedulerConfig implements SchedulingConfigurer {
    
    private final int POOL_SIZE = 10;

    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
        
        ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
        
        threadPoolTaskScheduler.setPoolSize(POOL_SIZE);
        threadPoolTaskScheduler.setThreadNamePrefix("my-scheduled-task-pool-");
        threadPoolTaskScheduler.initialize();

        scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
    }
}

 

간단하게 yml 파일을 통해서도 가능하다.

spring: 
  task: 
    scheduling: 
      pool: 
        size: 10 
      thread-name-prefix: my-scheduled-task-pool-

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함