我使用Spring Boot使用CXF Rest Api,所以这是我的application.properties:
cxf.path=/
cxf.jaxrs.server.address=/api
cxf.jaxrs.component-scan=true
cxf.jaxrs.classes-scan-packages=org.apache.cxf.jaxrs.swagger,org.apache.cxf.metrics
我的端点被注释为@Component
,但问题是我不仅拥有组件或提供程序,而且还拥有ExceptionMappers,输入/输出/故障拦截器。
现在我想知道是否也可以通过属性文件进行配置。
我知道可能的解决方案(不要向我提出这个方案):
@Bean
public Server rsServer() {
final JAXRSServerFactoryBean endpoint = new JAXRSServerFactoryBean();
endpoint.setInInterceptors(Arrays.<Interceptor<? extends Message>>asList(
interceptor1,
interceptor2,
interceptor3
));
endpoint.setOutInterceptors(Arrays.<Interceptor<? extends Message>>asList(out1));
endpoint.setOutFaultInterceptors(Arrays.<Interceptor<? extends Message>>asList(out1));
endpoint.setProviders(Arrays.asList(
provider1(),
provider2()
));
endpoint.setBus(bus);
endpoint.setAddress("/api");
endpoint.setServiceBeans(Arrays.asList(
endpoint1,
endpoint2,
...,
endpointN
));
endpoint.setFeatures(Arrays.asList(new Swagger2Feature()));
return endpoint.create();
}
这一点都不酷,因为可以自动配置许多功能,现在对于一些其他配置,我必须手动配置所有内容。
它完全扼杀了使用Spring Boot的目的。那么..有什么建议吗?
答案 0 :(得分:0)
@ karthik-prasadkart的答案是正确的。如果您需要更大的灵活性,也可以将其放在false
:
cxf.jaxrs.component-scan=false
并创建一个扩展@Configuration
的{{1}}类(通常由org.apache.cxf.jaxrs.spring.SpringComponentScanServer
导入)。在这里,您可以覆盖方法并进行最后的特定更改,例如在专门用于此目的的cxf.jaxrs.component-scan=true
方法中。
org.apache.cxf.jaxrs.spring.AbstractSpringConfigurationFactory#finalizeFactorySetup