如何让我的Jersey 2端点在启动时急切地初始化?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让我的Jersey 2端点在启动时急切地初始化?相关的知识,希望对你有一定的参考价值。
我正在从Jersey 1.x移植一些代码,我的各种运行状况检查端点的实现依赖于在启动时初始化的所有@Singleton
端点资源,以便能够检测要执行的检查。
在Jersey 2.0中 - 无论我做什么,我似乎无法让我的资源端点在启动时初始化,并且它们仅在第一次访问每个端点时被构造+初始化。
我想我可以在Application
课程中自己初始化它们,但我宁愿使用包扫描!
有没有人知道是否有一些配置选项会告诉Jersey 2急切地初始化它在包扫描期间找到的所有资源端点?
还是一些HK2注释或技巧?
答案
“或者某些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");
}
}
UPDATE
基于this related question,如果你需要显式实例化ResourceConfig
,就像在链接问题的情况下,你可以创建一个Feature
并注册该功能,如this answer中所示
UPDATE 2
UPDATE 3
看起来先前链接到的直接范围内存泄漏问题已在版本2.22.1中得到解决
以上是关于如何让我的Jersey 2端点在启动时急切地初始化?的主要内容,如果未能解决你的问题,请参考以下文章
当 Jersey ServletContainer 位于“/*”时,websocket 端点上的 404
在 Python 中处理时,如何确保在短路点之后不会急切地评估任意函数调用列表?