首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何知道当前是否正在关机?

如何知道当前是否正在关机?
EN

Stack Overflow用户
提问于 2011-04-27 22:08:27
回答 2查看 2.2K关注 0票数 8

在Tomcat中,当服务器关闭时,它会尝试将它所知道的类中的所有静态变量设置为null。通过接触这些类,它们的静态初始化器被运行,这可能导致我们的一些具有大量静态初始化器的遗留类的无限循环。

有没有一种优雅的方法来检测当前是否正在进行关机?然后,我们可以在静态初始化器的顶部检查我们是否处于关闭模式,然后忽略初始化。

我们找到的唯一一种似乎有效的方法是:

代码语言:javascript
复制
    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 );
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-28 00:41:02

您可以查看Tomcat是否使用新的线程来执行关闭工作,如果是,您可以遍历当前线程并查找此线程。

接下来,设置ServletContextListener,以便在contextInitialized和contextDestroyed中打开和关闭标志,您的类将检查该标志。

票数 2
EN

Stack Overflow用户

发布于 2011-04-29 12:42:56

您是否可以控制webapp配置?如果是这样,您可以通过设置,

代码语言:javascript
复制
clearReferencesStatic=false

documentation中声明的/META-INF/context.xml

否则,我同意在ServletContextListener中设置标志可能是您最好的选择。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5805449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档