代码之家  ›  专栏  ›  技术社区  ›  TiGz

如何让我的Jersey 2端点在启动时立即初始化?

  •  4
  • TiGz  · 技术社区  · 11 年前

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

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

    我想我可以在 Application 类,但我宁愿使用包扫描!

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

    或者一些HK2注释或技巧?

    1 回复  |  直到 11 年前
        1
  •  9
  •   Community Mohan Dere    6 年前

    “还是一些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版中解决

    推荐文章