可以根据春季个人资料发布运动衫休息服务吗?
让我们说以下示例,使用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>
最佳答案
因此,您可以做的是掌握ApplicationContext
并使用getBeansWithAnnotation(Path.class)
。这将为您提供配置文件中的所有资源实例。然后,您可以注册实例。
我虽然可以将ApplicationContext
注入到ResourceConfig
中,但是如上文the comment所述,似乎ResourceConfig
的创建尚无法访问。
我能够上班的是使用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);
}
删除所有资源的所有其他注册。只需让功能注册它们即可。
我已经确认这可行。不确定如何设置环境配置文件,但希望这是您已经知道的方法。