Использование Spring Boot 2.0.0.RELEASE в Google Appengine Standard. Использование автомасштабирования, но попытка получить некоторый контроль над созданием / уничтожением экземпляров. Необходимо иметь возможность выполнить некоторую очистку и вы хотите регистрировать эти события.
Любые методы в Spring Boot, такие как @Predestroy или ContextClosedEvent, похоже, не работают в GAE.
Согласно документации, должна быть возможность обнаруживать завершение работы экземпляра, добавив ловушку отключения.
Документация LifecycleManager.ShutdownHook.
Безуспешно пытались разместить его в нескольких местах.
Пример как @Bean:
@Bean
public LifecycleManager lifecycleManager() {
LifecycleManager lifecycle_manager = LifecycleManager.getInstance();
lifecycle_manager.setShutdownHook(new ShutdownHook() {
public void shutdown() {
LifecycleManager.getInstance().interruptAllRequests();
log.error("Shutdown " + getClassSimpleName() + ".");
}
});
log.warn("Created shutdown hook.");
return lifecycle_manager;
}
Хук выключения установлен правильно, но не запускается, когда экземпляр выходит из строя.
Как @Bean, это не так!
Как вы можете прочитать в Google Issue Tracker:
Shutdown hooks only work for manual scaled instances on the standard runtime (...).
Хуки выключения просто не работают при автоматическом и базовом масштабировании.
Так ли это до сих пор? , это ответ почти год назад.
Я больше не работаю с этой технологией, но беглый взгляд на документацию и средство отслеживания проблем предлагают это («Статус: не исправить (предполагаемое поведение)»).
Спасибо, арудзинская. У меня возникает странная ошибка, когда я пытаюсь работать с ручным масштабированием. Та же ошибка для ручного и автоматического масштабирования см. Этот stackoverflow.com/review/suggested-edits/21980832
Работает ли он вне Google App Engine?