【问题标题】:How do I get my Jersey 2 Endpoints to eagerly initialize on startup?如何让我的 Jersey 2 端点在启动时急切地初始化?
【发布时间】:2015-01-23 16:43:10
【问题描述】:

我正在从 Jersey 1.x 移植一些代码,并且我对各种健康检查端点的实现依赖于在启动时初始化的所有 @Singleton 端点资源,以便能够检测要执行哪些检查。

在 Jersey 2.0 中 - 无论我做什么,我似乎都无法让我的资源端点在启动时初始化,并且它们仅在第一次访问每个端点时才被构造+初始化。

我想我可以在 Application 类中自己初始化它们,但我宁愿使用包扫描!

有没有人知道是否有一些配置选项会告诉 Jersey 2 急切地初始化它在包扫描期间找到的所有资源端点?

或者一些 HK2 注释或技巧?

【问题讨论】:

    标签: java jersey jersey-2.0 hk2


    【解决方案1】:

    “或者一些 HK2 注释或技巧?”

    您可以使用 HK2 的Immediate Scope。只需使用@Immediate 注释资源类(其作用类似于@Singleton,因此您可以摆脱它),然后在ServiceLocator 上启用直接作用域。一个例子:

    import org.glassfish.hk2.api.ServiceLocator;
    import org.glassfish.hk2.utilities.ServiceLocatorUtilities;
    ...
    
    @ApplicationPath("/rest")
    public class JerseyApplication extends ResourceConfig {
    
        @Inject
        public JerseyApplication(ServiceLocator locator) {
            ServiceLocatorUtilities.enableImmediateScope(locator);
            packages("thepackages.to.scan");
        }
    }
    

    更新

    基于this related question,如果您需要显式实例化ResourceConfig,如链接问题的情况,您可以创建Feature并注册该功能,如this answer所示

    更新 2

    请看related issue

    更新 3

    看起来先前链接到的即时范围内存泄漏问题已在版本 2.22.1 中得到解决

    【讨论】:

      猜你喜欢
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多