如何让我的 Jersey 2 端点在启动时急切初始化?
How do I get my Jersey 2 Endpoints to eagerly initialize on startup?
我正在从 Jersey 1.x 移植一些代码,我对各种健康检查端点的实现依赖于在启动时初始化的所有 @Singleton
端点资源,以便能够检测到哪些检查要做。
在 Jersey 2.0 中 - 无论我做什么,我似乎都无法在启动时初始化我的资源端点,它们仅在第一次访问每个端点时才被构造+初始化。
我想我可以在 Application
class 中自己初始化它们,但我宁愿使用包扫描!
有没有人知道是否有一些配置选项会告诉 Jersey 2 急切地初始化它在包扫描期间找到的所有资源端点?
或者一些 HK2 注释或技巧?
"Or some HK2 annotation or trick?"
您可以使用 HK2 的 Immediate Scope. Just annotate the resource class with @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, if you need to explicitly instantiate the ResourceConfig
, as in the case of the linked question, you can create a Feature
and register the feature, as seen in this answer
更新 2
更新 3
之前链接到的立即作用域内存泄漏问题似乎已在版本 2.22.1 中得到解决
我正在从 Jersey 1.x 移植一些代码,我对各种健康检查端点的实现依赖于在启动时初始化的所有 @Singleton
端点资源,以便能够检测到哪些检查要做。
在 Jersey 2.0 中 - 无论我做什么,我似乎都无法在启动时初始化我的资源端点,它们仅在第一次访问每个端点时才被构造+初始化。
我想我可以在 Application
class 中自己初始化它们,但我宁愿使用包扫描!
有没有人知道是否有一些配置选项会告诉 Jersey 2 急切地初始化它在包扫描期间找到的所有资源端点?
或者一些 HK2 注释或技巧?
"Or some HK2 annotation or trick?"
您可以使用 HK2 的 Immediate Scope. Just annotate the resource class with @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, if you need to explicitly instantiate the ResourceConfig
, as in the case of the linked question, you can create a Feature
and register the feature, as seen in this answer
更新 2
更新 3
之前链接到的立即作用域内存泄漏问题似乎已在版本 2.22.1 中得到解决