我在 Fat JAR 类型的部署中运行我的 TomEE,最近我注意到我的生命周期在中断(信号)@PreDestroy
时没有被触发。^C
我相信这可能是因为当 Fat JAR 爆炸成 WAR 时,WAR 会在单独的 JVM 中运行。我注意到,如果我配置自己的关闭挂钩,它确实会触发。
应用程序.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 的人都容易出现这个问题,除非他们编写了自己的托管 bean 关闭挂钩。