Когда мое весеннее веб-приложение закрывается, есть ли событие, к которому я могу каким-либо образом подключиться, чтобы я мог выполнить некоторый код очистки для очистки некоторых пулов и т. Д.
Вы можете использовать следующее
метод уничтожения , поскольку @ amir75 рекомендует
@ PreDestroy аннотация
Реализация DisposableBean и переопределение метода уничтожения.
Все подробности об этом можно найти в Одноразовые обратные вызовы .
Spring bean-компоненты имеют атрибут destroy-method, который будет вызываться при закрытии контекста.
<bean id="bean1" destroy-method="stop" class="com.example.Bean" />
Чтобы закрыть его, необходимо вызвать метод close ():
http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/context/support/AbstractApplicationContext.html#close%28%29
(или просто закройте контейнер, если необходимо)
Надеюсь, это поможет ..
Основываясь на спецификации JSR-250, наилучшей практикой для использования в современных весенних приложениях является аннотация @PreDestroy, поскольку при использовании этого подхода вы отделите ваши бины от Spring.
@PreDestroy
Не для Spring способ справиться с этим - написать класс, который реализует ServletContextListener и выполнить очистку в его методе contextDestroyed.Вы добавили бы свой класс в качестве прослушивателя контекста в web.xml.
ServletContextListener
contextDestroyed
В соответствии с примером проекта Spring Boot logback, вы должны закрыть контекст для очистки системы журналирования: https://github.com/spring-projects/spring-boot/commit/10402a651f1ee51704b58985c7ef33619df2c110
Пример:
public static void main(String[] args) throws Exception { SpringApplication.run(SampleLogbackApplication.class, args).close(); }