繁体   English   中英

基于Spring Profile的Jersey Rest Service发布

[英]Spring Profile Based Jersey Rest Service publish

可以根据春季个人资料发布运动衫休息服务吗? 让我们说以下示例,使用profile1时如何发布RegisterServices1

public class ApiGWRestApplicationConfig extends ResourceConfig {

   public ApiGWRestApplicationConfig() {     
      register(RegisterServicesApiGWInterface.class);
    }
}

@Service
@Profile("profile1")
@Path(SystemConstants.REST_REGISTER)
public class RegisterServices1 implements RegisterServicesApiGWInterface {

}

@Service
@Profile("profile2")
@Path(SystemConstants.REST_REGISTER)
public class RegisterServices2 implements RegisterServicesApiGWInterface{}

web.xml中

<servlet>
    <servlet-name>jersey-servlet-kagw</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.ttech.tims.imos.web.ApiGWRestApplicationConfig</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

因此,您可以做的是掌握ApplicationContext并使用getBeansWithAnnotation(Path.class) 这将为您提供配置文件中的所有资源实例。 然后,您可以注册实例。

我虽然可以将ApplicationContext注入到ResourceConfig ,但是如上面的注释中所述,似乎ResourceConfig的创建尚无法访问它。

我能够使用的工作是使用JAX-RS Feature ,该Feature也可以访问注册方法,就像ResourceConfig 使用Feature将使您可以访问ApplicationContext

public class SpringProfilesFeature implements Feature {

    @Inject
    private ApplicationContext context;

    @Override
    public boolean configure(FeatureContext featureContext) {
        Map<String, Object> resources = context.getBeansWithAnnotation(Path.class);

        resources.values().forEach(resource -> featureContext.register(resource));

        return true;
    }
}

然后只需向ResourceConfig注册功能

public AppConfig() {
    register(SpringProfilesFeature.class);
}

删除所有资源的所有其他注册。 只需让功能注册它们即可。

我已经确认这可行。 不确定如何设置环境配置文件,但希望这是您已经知道的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM