Я запускаю TomEE в развертывании типа FAT JAR, и недавно я заметил, что мой жизненный цикл @PreDestroy
не запускается при прерывании (сигнал ^C
).Я полагаю, что это может быть связано с тем, что когда FAR JAR взрывается в WAR, WAR будет запускаться в отдельной JVM.Я заметил, что если я настрою свой собственный хук отключения, он действительно сработает.
Application.java
@Startup
@ApplicationScoped
public class Application {
@PostConstruct
private void init() {
System.out.println("=============INITIALIZING=============");
Runtime.getRuntime()
.addShutdownHook(new Thread(() -> System.out.println("Shutdown Hook is running!")));
}
@PreDestroy
private void deinit() {
System.out.println("=============DESTROYING===============");
}
}
Но это не конечное решение, как у меня все еще естьнетронутые жизненные циклы.Spring Boot справляется с этим с помощью своего Fat JAR с предварительно настроенным отключающим крюком .Код для этого можно увидеть здесь .
Я надеюсь, что разработчик TomEE может вмешаться в эту проблему.В настоящее время я вижу, что любой, кто использует Fat JAR, склонен к этой проблеме, если только он не кодировал свой собственный обработчик управляемых бинов.