gpt4 book ai didi

java - JerseyServlet 在服务器启动时初始化资源

转载 作者:太空宇宙 更新时间:2023-11-04 13:12:02 25 4
gpt4 key购买 nike

我正在使用 JerseyServletContainer 机制来部署我的 REST Web 服务。 web.xml 中的配置如下所示:

<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>
com.myservlet.classes
</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>

我想要实现的是在第一次 HTTP 调用 REST 服务之前构建我的 REST 资源类。

目前,尽管我已经设定了

    <load-on-startup>0</load-on-startup>

似乎仅当首次向该资源发出 HTTP 请求时,Jersey 的 ServletContainer 才会调用实际类的构造函数。

有办法实现吗?

我需要补充一点,目前我刚刚添加了一个 ServletContextListener,它对自身进行 HTTP 调用。但我想避免这种老套的方式。

非常感谢任何帮助/建议?

编辑:我需要补充一点,我在 Resource 类上使用 @Singleton 注释,因为我在整个应用程序中只需要一个实例

最佳答案

您可以使用this answer中提到的@Immediate范围。 。您应该查看“相关问题”链接。立即线程存在一些与内存泄漏相关的问题。看来问题已经解决了。因此您应该确保使用最新版本来获取补丁。

链接的答案使用无 web.xml 的配置。但是,如果您想保留 web.xml(使用 @ApplicationPath),则可以根据需要在 web.xml 中声明 ResourceConfig 类。

public class JerseyApplication extends ResourceConfig {

@Inject
public JerseyApplication(ServiceLocator locator) {
ServiceLocatorUtilities.enableImmediateScope(locator);
packages("com.myservlet.classes");
}
}

<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>org.foo.JerseyApplication</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>

关于java - JerseyServlet 在服务器启动时初始化资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33867611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com