Spring Profile Based Jersey Rest Service发布

时间:2017-04-04 05:07:32

标签: java spring jersey

可以根据弹簧配置文件发布球衣休息服务吗? 如下例所示,如何在使用RegisterServices1时发布profile1

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>

1 个答案:

答案 0 :(得分:1)

所以你可以做的是抓住ApplicationContext并使用getBeansWithAnnotation(Path.class)。这将为您提供属于配置文件的所有资源实例。然后你可以注册实例。

我虽然可以将ApplicationContext注入ResourceConfig,但正如上面the comment中所述,似乎ResourceConfig的创建并没有&#39} ; t还可以访问它。

我能够开展工作的方法是使用JAX-RS 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);
}

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

我确认这是有效的。不确定如何为环境设置配置文件,但希望这是您已经知道如何做的事情。