【问题标题】:Closing a Spring ApplicationContext关闭 Spring ApplicationContext
【发布时间】:2013-06-20 15:22:24
【问题描述】:

当我创建一个新的 Spring ApplicationContext 时,例如通过

final ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfiguration.class);

Eclipse (STS 3.2.0) 会将其标记为潜在的资源泄漏,并抱怨它永远不会关闭('Resource leak: 'ac' is never closed)。

到目前为止,一切都很好。然后我试图调查这个问题,但找不到close()shutdown() 或类似的方法,甚至可以让我关闭ApplicationContext。这是 Eclipse 警告失控、预期设计还是我遗漏了什么?

【问题讨论】:

标签: java spring


【解决方案1】:

您将ac 声明为ApplicationContext,它没有定义close() 方法。而不是使用任何扩展 Closeable 的超类型 AnnotationConfigApplicationContext(例如 ConfigurableApplicationContext)提供您需要释放所有资源的 close() 方法。

【讨论】:

    【解决方案2】:

    如果您使用 Java 7,则可以使用 try-with-resources 语句为您完成工作

    try (AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(...))
    {
      ...
    }
    

    【讨论】:

      【解决方案3】:

      是的,接口ApplicationContext 没有close() 方法,但子类AbstractApplicationContextGenericApplicationContextclose()destroy()。所以,我建议改用它们。还有一个有用的方法registerShutdownHook()

      【讨论】:

        【解决方案4】:

        将您的 ApplicationContext 向下转换为定义 close() 方法的 ConfigurableApplicationContext:

        ((ConfigurableApplicationContext)appCtx).close();

        https://stackoverflow.com/a/14424009/466363

        【讨论】:

          猜你喜欢
          • 2013-01-03
          • 1970-01-01
          • 2015-05-24
          • 1970-01-01
          • 1970-01-01
          • 2012-12-20
          • 1970-01-01
          • 1970-01-01
          • 2012-06-09
          相关资源
          最近更新 更多