1. 概述
Spring Boot CXF启动器提供了一种简单的方法来配置和启动Apache CXF,以便在Spring Boot应用程序中使用CXF。
在本教程中,我们将演示如何使用Spring Boot CXF启动器编写一个简单的应用程序。
2. Spring Boot Actuator
当检测到Spring Boot Actuator存在时,应用程序可能会受益于指标支持自动配置(基于Micrometer库)。检测层自动(或以编程方式)跟踪与请求处理相关的服务器端指标,并将其与其他指标一起公开。有关详细信息,请查看Micrometer集成文档。
属性 | 描述 | 默认值 |
---|---|---|
cxf.metrics.enabled | 启用或禁用指标自动配置 | true |
cxf.metrics.jaxrs.enabled | 启用或禁用JAX-RS指标自动配置 | true |
cxf.metrics.jaxws.enabled | 启用或禁用JAX-WS指标自动配置 | true |
cxf.metrics.server.autoTimeRequests | CXF处理的请求是否应该自动计时。如果发出的时间序列数量由于请求映射时间而增长太大,请将其设置为“false”并根据需要在每次调用的基础上使用@Timed或@TimeSet。 | true |
cxf.metrics.server.requestsMetricName | 已接收请求的指标名称(服务器端) | cxf.server.requests |
cxf.metrics.server.maxUriTags | 允许的唯一URI标记值的最大数量。达到标签值的最大数量后,具有额外标签值的指标将被过滤器拒绝。 | 100 |
cxf.metrics.client.requestsMetricName | 已发送请求的指标名称(客户端) | cxf.client.requests |
cxf.metrics.client.maxUriTags | 允许的唯一URI标记值的最大数量。达到标签值的最大数量后,具有额外标签值的指标将被过滤器拒绝。 | 100 |
3. Spring Boot CXF JAX-WS启动器
3.1 功能
使用“/services/*” URL模式注册CXFServlet,以便为CXF JAX-WS端点提供服务。
3.2 设置
我们需要添加以下Maven依赖项:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.1.12</version>
</dependency>
最新版本的cxf-spring-boot-starter-jaxws可以在Maven Central上找到。
3.3 其他配置
- “cxf.path”:自定义CXFServlet URL模式
- “cxf.servlet.init”:映射属性自定义CXFServlet属性,例如“services-list-path”(默认位于“/services”)等。
- “cxf.servlet.loadOnStartup”:设置CXFServlet的loadOnStartup优先级(默认为-1)
- “cxf.servlet.enabled”:启用/禁用CXFServlet注册(自3.3.12/3.4.5起)
如果需要,可以使用Spring @ImportResource注解来导入类路径上可用的现有JAX-WS上下文。
4. API文档
JAX-WS端点支持WSDL。
4.1 服务注册中心
将JAX-WS端点发布到众所周知的服务注册中心(例如Netflix Eureka)可以类似于注册JAX-RS端点的方式来实现,并在JAX-RS Spring Boot Scan演示中显示。
4.2 示例
考虑以下配置实例:
@Configuration
public class WebServiceConfig {
@Autowired
private Bus bus;
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(bus, new HelloPortImpl());
endpoint.publish("/Hello");
return endpoint;
}
}
将CXF JAX-WS启动器与此配置一起使用足以启用CXF JAX-WS端点,该端点将响应SOAP请求URI,例如http://localhost:8080/services/Hello。
另请参阅JAX-WS Spring Boot。
特征
使用“/services/”URL模式注册CXFServlet以服务于CXFJAX-RS端点。
可选择自动发现JAX-RS根资源和提供程序并创建JAX-RS端点。
请注意,本节介绍了在SpringBoot应用程序中使用CXFJAX-RS客户端。
设置
JAX-RS启动器
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxrs</artifactId>
<version>3.1.12</version>
</dependency>
其他配置
- cxf.path:自定义CXFServletURL模式。
- cxf.servlet.init:映射属性自定义CXFServlet属性,例如“services-list-path”(默认位于“/services”)等。
- cxf.servlet.loadOnStartup:设置CXFServlet的loadOnStartup优先级(默认为-1)
- cxf.servlet.enabled:”启用/禁用CXFServlet注册(自3.3.12/3.4.5起)
- cxf.jaxrs.server.path:自定义JAX-RS服务器端点地址(默认为“/”)。
可以自动发现使用JAX-RS@Path和@Provider注解的JAX-RS根资源和提供程序以及使用CXF@Provider注解的本机CXF提供程序。
使用“cxf.jaxrs.component-scan”属性从自动发现的JAX-RS根资源和标记为Spring组件的提供程序创建JAX-RS端点(使用Spring@Component注解或从@Bean方法创建和返回).
使用“cxf.jaxrs.component-scan-packages”属性来限制哪些自动发现的Spring组件被接受为JAX-RS资源或提供程序类。它设置给定bean实例的类必须包含的包的逗号分隔列表。注意,如果设置此属性,则仅当给定bean是单例时才有效。它可以与“cxf.jaxrs.component-scan-beans”属性一起使用或作为替代方案使用。此属性从CXF3.1.11开始可用。
使用“cxf.jaxrs.component-scan-beans”属性来限制哪些自动发现的Spring组件被接受为JAX-RS资源或提供程序类。它设置了一个以逗号分隔的已接受bean名称列表——只有当它的bean名称在此列表中时,自动发现的组件才会被接受。它可以与“cxf.jaxrs.component-scan-packages”属性一起使用或替代。此属性从CXF3.1.11开始可用。
使用“cxf.jaxrs.classes-scan”属性从自动发现的JAX-RS根资源和提供程序类创建JAX-RS端点。此类类不必使用Spring@Component进行注解。此属性需要附带一个“cxf.jaxrs.classes-scan-packages”属性,该属性设置要扫描的包的逗号分隔列表。
请注意,虽然“cxf.jaxrs.component-scan”和“cxf.jaxrs.classes-scan”是互斥的,但“cxf.jaxrs.component-scan”可以与“cxf.jaxrs.classes-scan-packages”一起使用”属性启用JAX-RS资源和提供程序的自动发现,这些资源和提供程序可能会或可能不会被标记为Spring组件。
如果需要,可以使用SpringImportResource注解导入类路径上可用的现有JAX-RS上下文,而不是自动发现资源。
API文档
昂首阔步
请参阅CXFSwagger2Feature文档,了解如何在SpringBoot中启用Swagger2Feature以及如何自动激活SwaggerUI。
WADL
如果cxf-rt-rs-service-description模块在运行时类路径上可用,CXF会自动加载WADL提供程序。
服务注册刊物
JAX-RSSpringBootScan演示中展示了将JAX-RS端点发布到知名服务注册表(例如NetflixEurekaRegistry)中。
例子
手动配置
考虑以下配置实例:
JAX-RS配置
@SpringBootApplication
public class SampleRestApplication {
@Autowired
private Bus bus;
public static void main(String[] args) {
SpringApplication.run(SampleRestApplication.class, args);
}
@Bean
public Server rsServer() {
JAXRSServerFactoryBean endpoint = new JAXRSServerFactoryBean();
endpoint.setBus(bus);
endpoint.setAddress("/");
// Register 2 JAX-RS root resources supporting "/sayHello/{id}" and "/sayHello2/{id}" relative paths
endpoint.setServiceBeans(Arrays.<Object>asList(new HelloServiceImpl1(), new HelloServiceImpl2()));
endpoint.setFeatures(Arrays.asList(new Swagger2Feature()));
return endpoint.create();
}
}
将CXFJAX-RS启动器与此配置一起使用足以启用CXFJAX-RS端点,该端点将响应HTTP请求URI,例如
“http://localhost:8080/services/sayHello/ApacheCxfUser”。上面的代码还使Swagger文档在“http://localhost:8080/services/swagger.json”可用。
另请参阅JAX-RSSpringBoot演示。
自动配置
如果启用了自动发现,则可以简化手动配置部分中显示的SpringBoot应用程序示例。
例如,给定以下application.yml属性:
应用程序属性
cxf:
jaxrs:
component-scan: true
classes-scan-packages: org.apache.cxf.jaxrs.swagger
该应用程序变得简单:
JAX-RS自动配置
@SpringBootApplication
public class SampleScanRestApplication {
public static void main(String[] args) {
SpringApplication.run(SampleScanRestApplication.class, args);
}
}
此应用程序将启用CXFJAX-RS端点,该端点将响应HTTP请求URI,例如
“http://localhost:8080/services/sayHello/ApacheCxfUser”。上面的代码还使Swagger文档在“http://localhost:8080/services/swagger.json”可用。
另请参阅JAX-RSSpringBootScan演示。
与往常一样,本教程的完整源代码可在GitHub上获得。