我在一个胖罐子类型的部署中运行我的书,最近我注意到
@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通过其预先配置的胖罐子很好地处理了这个问题
shutdown hook
. 可以看到它的代码
here
.
我希望能有一本关于这个问题的书。目前,我看到任何使用Fat JAR的人都容易出现这个问题,除非他们已经编写了自己的托管bean关闭挂钩。