如何使用Spring初始化Jersey应用程序(ResourceConfig)?

 Cockroach小小强 发布于 2023-02-05 10:34

我正在使用Jersey 2和Spring,我正在尝试使用Spring上下文中的参数初始化我的Jersey应用程序(即从ResourceConfig派生的类).

背景:我有一个我构建的Jersey应用程序(即单个WAR),我将它部署在不同服务器上具有不同Spring配置的服务器集群中,以启用或禁用服务器的不同部分,例如,某些服务器已经转换了/search资源在泽西岛1.0这真的很容易:我只是把,


在Spring配置中让Jersey扫描该特定包,并在其中启用JAX-RS资源提供程序.

现在在Jersey 2.0中Spring 不起作用,因此资源必须以编程方式在从ResourceConfig以下派生的派生类中注册:

public class MyApplication extends ResourceConfig {

    public MyApplication() {
        packages("com.mycompany.resources.search");
    }
}

到目前为止一切顺利,但我需要有条件地扫描该包,我无法弄清楚如何将任何Spring配置放入MyApplication类中.我认为构造函数注入可能有效:

public class MyApplication extends ResourceConfig {

    @Autowired
    public MyApplication(@Qualifier("my-config") MyConfiguration myConfiguration) {
        if (myConfiguration.isEnabled()) {
            packages("com.mycompany.resources.search");
        }
    }
}

但是HK2抱怨它找不到默认的构造函数......所以这向我表明DI在构造这个类时起作用,但是DI没有使用Spring.

同样,使用Spring bean生命周期不起作用:

public class MyApplication extends ResourceConfig implements InitializingBean {

    @Autowired
    private MyConfiguration myConfiguration;

    public MyApplication() {
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        if (myConfiguration.isEnabled()) {
            packages("com.mycompany.resources.search");
        }
    }
}

(该afterPropertiesSet方法未被调用.)

所以现在我陷入困境:有没有办法ResourceConfig使用Spring 配置Jersey 应用程序对象?

更新:

我在下面接受了@ JohnR的答案,但我还要包括我认为更清洁的最终解决方案.@ JohnR的答案是将对象初始化两次:首先是Spring,然后是Jersey/HK2.当Spring初始化对象时,您将依赖项缓存在静态成员中,然后当Jersey/HK2稍后初始化它时,您可以检索依赖项.

我最终这样做了:

public class MyApplication extends ResourceConfig {

    public MyApplication() {
        ApplicationContext rootCtx = ContextLoader.getCurrentWebApplicationContext();
        MyConfiguration myConfiguration = rootCtx.getBean(MyConfiguration.class);

        if (myConfiguration.isEnabled()) {
            packages("com.mycompany.resources.whatever");
        }
    }
}

我们让Jersey/HK2初始化它,而不是让对象初始化两次,然后我们从Spring中检索依赖项.

这两种解决方案都容易受到时间限制:它们都假设Spring在Jersey/HK2之前初始化.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有