Уничтожение созданного @bean исполнителя

Весной 4 у меня есть следующий файл annotationconfig

    @Bean(name = "replicationThreadExecutor")
public Executor replicationThreadExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(threadPoolCoreSize);
    executor.setMaxPoolSize(threadPoolCoreSize);
    executor.initialize();
    return executor;
}

Что меня беспокоит, так это разрушение Executor. Будет ли Spring распознавать, что динамический тип Executor является экземпляром DisposableBean, и уничтожать его, или мне нужно изменить тип возвращаемого значения на ThreadPoolTaskExecutor, чтобы это работало?

Как правило, конфигурация на основе Java должна быть настолько конкретной, насколько это возможно, поскольку они проверяются при создании контекста приложения. Следовательно, в этом случае может быть, что обратный вызов не зарегистрирован (хотя с DisposableBean он может работать).

M. Deinum 05.04.2018 12:02
1
1
72
1

Ответы 1

Если вы вызываете метод registerShutdownHook на ConfigurableApplicationContext, вызываются все методы уничтожения на singleton beans.

Если процесс умирает, пул потоков пойдет вместе с ним. Проблема, с которой я (потенциально) сталкиваюсь, связана с повторным развертыванием приложения.

rd31415 05.04.2018 14:30

В чем проблема с повторным развертыванием и какого поведения вы ожидаете при повторном развертывании

biiyamn 05.04.2018 15:11

при повторном развертывании я ожидаю, что контекст Spring будет уничтожен, и хочу, чтобы Threadpool был полностью уничтожен.

rd31415 05.04.2018 20:54

при повторном развертывании метода уничтожения вызова контейнера Spring для всех singleton beans, даже для веб-приложения, если вы хотите поведение клиента, вы можете настроить Spring bean, который реализует ApplicationListener и дождаться ContextClosedEvent, там вы можете добавить некоторое поведение при уничтожении Threadpool

biiyamn 06.04.2018 10:40

Другие вопросы по теме