我正在从Jersey 1.x移植一些代码,我各种Health
Check终结点的实现都依赖于@Singleton
在启动时初始化的所有终结点资源,以便能够检测要执行的检查。
在Jersey 2.0中,无论执行什么操作,我似乎都无法在启动时初始化我的资源端点,并且仅在首次访问每个端点时才对它们进行构造和初始化。
我想我可以在Application
课堂上自己初始化它们,但我更喜欢使用包扫描!
是否有人知道是否有一些配置选项可以告诉Jersey 2急于初始化它在程序包扫描期间找到的所有资源端点?
还是一些HK2注释或技巧?
“还是一些HK2注释或技巧?”
您可以使用HK2的即时范围。只需使用注释资源类@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");
}
}
基于此相关问题,如果需要显式实例化ResourceConfig
,如在链接问题中一样,则可以创建一个Feature
并注册该功能,如本答案所示。
处理的一种方法ServiceLocator是实现Feature。
import javax.inject.Inject;
import javax.ws.rs.core.Feature;
import javax.ws.rs.core.FeatureContext;
import org.glassfish.hk2.api.ServiceLocator;
import org.glassfish.hk2.utilities.ServiceLocatorUtilities;
public class ImmediateFeature implements Feature {
@Inject
public ImmediateFeature(ServiceLocator locator) {
ServiceLocatorUtilities.enableImmediateScope(locator);
}
@Override
public boolean configure(FeatureContext context) {
return true;
}
}
然后只需注册 Feature
ResourceConfig rc = new ResourceConfig().packages("jersey.hk2.test");
rc.register(ImmediateFeature.class);
我已经测试过了,效果很好
请参阅相关问题
看起来以前链接到的即时作用域内存泄漏问题已在2.22.1版中解决
或者一些HK2的注释或把戏?
我的项目的设置是- 用于持久化的Spring JDBC 下面是我的应用程序的日志,它捕获了与数据库的交互。 日志中有两件事是清楚的- 连接池仅在收到执行查询的第一个请求时才开始创建连接 一个包含4个连接的池需要将近30秒的时间来初始化 我的问题是- 如何配置DBCP在启动时自动初始化? 创建连接真的需要那么长时间吗? 注意:请不要建议切换到C3P0或Tomcat连接池。我知道这些解决方案。我更感兴
我按照步骤创建了HelloWorld示例,但它没有运行。它给出了以下错误: 初始化引导层java.lang.module.FindException时出错:读取模块:F:\Develop\Eclipse\HelloWorld\bin时出错,原因是:java.lang.module.InvalidModuleDescriptoRexception:HelloWorld.class在顶级目录中找到(模
问题内容: 我想在Web应用程序启动时加载属性文件并设置连接池。显然,我只想在一个地方进行一次,因此可以根据需要进行更改。对于常规的servlet,我只需将初始化代码放在servlet的init()方法中,但是您无法使用Jersey servlet对其进行访问。那么我在哪里做呢?上面链接中的侦听器如何工作? 问题答案: 您需要做的就是编写一个实现ServletContextListener接口的J
所以我最近在我的win10 PC上安装了eclipse,并创建了一个公共类。代码如下: 接下来,显示了一个错误: 然后,我删除了info.java文件,并显示以下错误: 我能做些什么来解决这个问题?