ThreadPoolTaskScheduler меняет poolSize во время выполнения - PullRequest
0 голосов
/ 04 сентября 2018

создаю планировщик:

@Bean
TaskScheduler taskScheduler(){
    ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
    threadPoolTaskScheduler.setPoolSize(5);
    threadPoolTaskScheduler.setAwaitTerminationSeconds(60);
    threadPoolTaskScheduler.setThreadNamePrefix("Test-");
    return threadPoolTaskScheduler;
}

Я жду дальше:

Каждую 1 секунду запускается мой запланированный метод и запускается 5 потоков (PoolSize(5)), и каждый поток создает мою логику. Для этого я создаю запланированный метод в компоненте @Component:

@Slf4j
@Component
public class MyScheduler {

    private final TaskScheduler taskScheduler;

    public MyScheduler(TaskScheduler taskScheduler) {
        this.taskScheduler = taskScheduler;
    }

    @Scheduled(fixedDelay = 1000L)
    public void test(){
        taskScheduler.schedule(() -> {
            try {
                Thread.sleep(9000L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            log.info("test");
        }, new Date());

    }
}

Работает нормально.

каждая 1 секунда запускает test() метод и работает 9 секунд. На 5 секунде у меня есть полный поток сообщений и жду первого свободного потока. Если я установлю sleep(5000L) - threadPool не сможет заполниться.

Но теперь мне нужно изменить poolSize во время выполнения. например с 5 до 10. Как я могу это сделать?

1 Ответ

0 голосов
/ 04 сентября 2018

Согласно документации, вы можете изменить размер планировщика во время выполнения, вызвав setPoolSize () (см .: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/concurrent/ThreadPoolTaskScheduler.html#setPoolSize-int-)

Проблема в том, что вам нужно иметь ссылку на определенный класс ThreadPoolTaskScheduler вместо интерфейса TaskScheduler.

Вам нужно решить, хотите ли вы изменить ссылки с TaskScheduler на ThreadPoolTaskScheduler, не нарушая ничего в вашем коде

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...