Когда мое веб-приложение spring отключится, есть ли какое-то событие, с которым я могу подключиться, чтобы каким-то образом я смог выполнить некоторый код очистки, чтобы очистить некоторые пулы и т.д.
У процесса spring есть процесс выключения, чтобы поместить код очистки?
Ответ 1
Вы можете использовать следующие
-
destroy-method
, поскольку @amir75 рекомендует -
@PreDestroy аннотация
-
Внесите DisposableBean и переопределите метод destroy.
Все данные об этом можно найти в Одноразовые обратные вызовы.
Ответ 2
Spring beans имеют атрибут "destroy-method", который будет вызываться при закрытии вашего контекста.
<bean id="bean1"
destroy-method="stop"
class="com.example.Bean" />
Чтобы закрыть его, вы вызываете метод close():
(или просто выключите контейнер, если это необходимо)
Надеюсь, что это поможет.
Ответ 3
Невозможно обработать этот метод, чтобы написать класс, который реализует ServletContextListener
и выполняет очистку в contextDestroyed
метод. Вы добавили бы свой класс в качестве слушателя контекста в web.xml.
Ответ 4
На основе спецификации JSR-250 лучшей практикой использования в современном приложении spring является аннотация @PreDestroy
, поскольку использование этого подхода отменит ваш beans от Spring.
Ответ 5
В соответствии с проектом Spring Boot logback example вы должны закрыть контекст для очистки системы ведения журнала: https://github.com/spring-projects/spring-boot/commit/10402a651f1ee51704b58985c7ef33619df2c110
Пример:
public static void main(String[] args) throws Exception {
SpringApplication.run(SampleLogbackApplication.class, args).close();
}