1

我在 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 关闭挂钩。

4

0 回答 0