Как проверить Spring Boot Shutdown Hook вызов?JAVA

Программисты JAVA общаются здесь
Anonymous
Как проверить Spring Boot Shutdown Hook вызов?

Сообщение Anonymous »

Я работаю над библиотекой, которая имеет (1) свое собственное управление жизненным циклом и (2) интеграцию Spring Boot. Чтобы объединить управление жизненным циклом библиотеки с помощью Spring Boot, я конструирую SmartLifeCycle бобы, которые обертывают обработчики запуска библиотеки и выключения. Тем не менее, подтверждение того, вызывают ли мне зарегистрированные обработчики отключения, неясно. Я надеюсь, что вызов Stop () в AssertableApplicationContext сделает свое дело, но это не так. Чтобы быть немного более конкретным, вот пример того, как он выглядит: < /p>

Код: Выделить всё

@Test
void lifecycleRegistryIntegratesWithDedicatedSpringLifecycleBeans() {
testContext.run(context -> {
// We expect beans to be registered for lifecycle handlers.
Map startHandlers = BeanFactoryUtils.beansOfTypeIncludingAncestors(
context, SpringLifecycleStartHandler.class
);
Map shutdownHandlers = BeanFactoryUtils.beansOfTypeIncludingAncestors(
context, SpringLifecycleShutdownHandler.class
);

for (SpringLifecycleStartHandler startHandler : startHandlers.values()) {
assertTrue(startHandler.isRunning());
}
for (SpringLifecycleShutdownHandler shutdownHandler : shutdownHandlers.values()) {
assertTrue(shutdownHandler.isRunning());
}

AtomicBoolean startHandlerInvoked = context.getBean("startHandlerInvoked", AtomicBoolean.class);
assertTrue(startHandlerInvoked.get());
AtomicBoolean shutdownHandlerInvoked = context.getBean("shutdownHandlerInvoked", AtomicBoolean.class);
assertFalse(shutdownHandlerInvoked.get());

// I hope that this would invoke the shutdown handler, but it does not
context.stop();
// Validate the shutdown handler is invoked...
await().atMost(Duration.ofSeconds(5))
.pollDelay(Duration.ofMillis(25))
.until(shutdownHandlerInvoked::get);
});
}
Как может стать очевидным, мой тестовый контекст создает один обработчик начала и обработчик отключения, которые мы обертываем в Springlifecycyclestarthandler и Springlifecycleshutdownhandler (оба экземпляра SmartLifeCycle ). Оба обработчики старта и выключения получают атомный , который переворачивается при обработке. Благодаря этому процессу я стремлюсь подтвердить, что (1) обработчик старта вызывается при запуске, и (2) обработчик отключения вызывается при выключении. Спасибо за любое руководство в этой области!


Подробнее здесь: https://stackoverflow.com/questions/796 ... invocation

Вернуться в «JAVA»