在 Tomcat 中,当服务器关闭时,它会尝试将它知道的类中的所有静态变量设置为空。通过接触这些类,它们的静态初始化器就会运行,这可能会导致我们的一些具有大量静态初始化器的遗留类陷入无限循环。
是否有一种优雅的方法来检测当前是否正在关机?然后我们可以在静态初始化程序的顶部检查我们是否处于关闭模式,然后忽略初始化。
我们发现唯一可行的方法一点也不优雅:
try{
Thread hook = new Thread();
Runtime.getRuntime().addShutdownHook( hook ); // fires "java.lang.IllegalStateException: Shutdown in progress" if currently in shutdown
Runtime.getRuntime().removeShutdownHook( hook );
}catch(Throwable th){
throw new Error("Init in shutdown thread", th );
}
最佳答案
你可以看看Tomcat是否使用了一个新的线程来做关闭工作,如果是你可以遍历当前线程并寻找这个线程。
接下来,设置 ServletContextListener,以便它在 contextInitialized 和 contextDestroyed 中打开和关闭标志,您的类检查该标志。
关于java - 如何知道当前是否正在进行关机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5805449/