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

标签 java rest jersey jax-rs jersey-2.0

我正在使用 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/

相关文章:

java - @PreAuthorize 无效。可能是什么问题?

java - AES 加密,InvalidKeyException : Unsupported key size: 6 bytes?

java - 从 JAXB 和 Jersey 生成更多类似 json 的 json

java - Jersey 2.3 为 ContainerRequestFilter 设置优先级

java - 实时查看...等中包含的集合中包含的集合

java - 单击按钮滑动到下一个 fragment

java - 在 Java 中使异步 Web 服务调用成为同步调用

java - Spring MVC : Correct Annotation of Controller Method for RESTful URI including ';'

java - Swagger Spring-MVC/SwaggerUI 身份验证

java - 在 Jersey 生命周期中如何拦截请求?