【问题标题】:How to force tomcat reload to reset static AtomicBoolean如何强制 tomcat 重新加载以重置静态 AtomicBoolean
【发布时间】:2018-01-10 07:07:08
【问题描述】:

在我的 Web 应用程序中,我有一个带有 @Bean 注释方法的 Spring @Configuration 类,它为我的应用程序所依赖的服务创建客户端。客户端是通过构建器创建的,该构建器通过在内部使用private static AtomicBoolean isClientCreated 变量来强制只存在一个客户端实例。

当我的一个 web 应用程序类更改强制 tomcat 重新加载(通过 web.xml 中的 PreResources 配置)时,客户端创建失败,因为即使在 bean 被销毁后,私有静态 AtomicBoolean isClientCreated 仍然是 true

如何在 tomcat 重新加载时重置此静态值?

【问题讨论】:

  • 不要使用static AtomicBoolean,而是为单例bean创建字段
  • 不幸的是,构建器是一个我们无法控制的 3p 库。

标签: java spring tomcat


【解决方案1】:

您可以使用@PostConstruct@PreDestroy 来注释您的配置(或任何合适的单例bean)。然后在任何方法中重置标志。

the example

【讨论】:

  • 正如我在评论中提到的,AtomicBoolean 是第三方库中的私有静态,我无法更改。所以,不幸的是,这对我不起作用。
  • 您仍然可以通过反射访问该字段。只需获取该字段并调用 setAccessible(true) 即可调用并重置该字段
猜你喜欢
  • 2016-05-12
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 2012-03-26
  • 2023-03-07
  • 2011-05-14
  • 2016-02-11
  • 1970-01-01
相关资源
最近更新 更多