복붙노트

[SPRING] 스프링 부트의 기본 스케줄러 풀 크기는 얼마입니까?

SPRING

스프링 부트의 기본 스케줄러 풀 크기는 얼마입니까?

일부 작업을 수행하기 위해 spring-boot 및 @Scheduled 주석을 사용하고 있습니다.

스프링 부트에서 예약 된 작업의 기본 풀 크기가 기본적으로 무엇인지 알아낼 수 있습니까?

이유 : 다음 클래스는 작업을 병렬로 실행하지 않고 하나씩 실행합니다. 어쩌면 단 하나의 스레드 실 행자 만 기본적으로 구성됩니까?

@Service
public class ZipFileTesterAsync {

    @Scheduled(fixedDelay = 60000, initialDelay = 500)
    public void run() throws Exception {
        System.out.println("import 1");
        TimeUnit.MINUTES.sleep(1);
        System.out.println("import 1 finished");
    }

    @Scheduled(fixedDelay = 60000, initialDelay = 1000)
    public void run2() throws Exception {
        System.out.println("import 2");
        TimeUnit.MINUTES.sleep(1);
    }
}

결과 : 첫 번째 완료 후 두 번째 작업이 실행됩니다.

해결법

  1. ==============================

    1.예, 모든 @Scheduled 메소드는 기본적으로 단일 스레드를 공유합니다. 다음과 같이 @Configuration을 정의하여이 동작을 재정의 할 수 있습니다.

    예, 모든 @Scheduled 메소드는 기본적으로 단일 스레드를 공유합니다. 다음과 같이 @Configuration을 정의하여이 동작을 재정의 할 수 있습니다.

    @Configuration
    public class SchedulingConfigurerConfiguration implements SchedulingConfigurer {
    
        @Override
        public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
            ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
            taskScheduler.setPoolSize(100);
            taskScheduler.initialize();
            taskRegistrar.setTaskScheduler(taskScheduler);
        }
    }
    

    이 예제는 모든 @Scheduled 메서드가 크기가 100 인 스레드 풀을 공유하도록합니다.

  2. from https://stackoverflow.com/questions/29796651/what-is-the-default-scheduler-pool-size-in-spring-boot by cc-by-sa and MIT license