46. WebSockets
Spring Boot为嵌入式Tomcat,Jetty和Undertow提供WebSockets自动配置。如果将war文件部署到独立容器,则Spring Boot假定容器负责
其WebSocket支持的配置。
Spring Framework 为MVC Web应用程序提供了丰富的WebSocket支持,可以通过 spring-boot-starter-websocket 模块轻松访问。
WebSocket支持也可用于 响应式Web应用程序,并且需要在 spring-boot-starter-webflux 旁边包含WebSocket API:
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
</dependency>
47.网络服务
Spring Boot提供Web服务自动配置,因此您必须做的就是定义 Endpoints 。
该Spring Web服务功能,可以与 spring-boot-starter-webservices 模块可以轻松访问。
可以分别为您的WSDL和XSD自动创建 SimpleWsdl11Definition 和 SimpleXsdSchema beans。为此,请配置其位置,如以下示例所示:
spring.webservices.wsdl-locations=classpath:/wsdl
48.使用 WebServiceTemplate 调用Web服务
如果需要从应用程序调用远程Web服务,则可以使用 WebServiceTemplate 该类。由于 WebServiceTemplate 实例在使用之前通常需要进行自
定义,因此Spring Boot不提供任何单个自动配置的 WebServiceTemplate bean。但是,它会自动配置 WebServiceTemplateBuilder ,可用
于在需要时创建 WebServiceTemplate 实例。
以下代码显示了一个典型示例:
默认情况下, WebServiceTemplateBuilder 使用类路径上的可用HTTP客户端库检测到合适的基于HTTP的 WebServiceMessageSender 。您
还可以按如下方式自定义读取和连接超时:
@Bean
public WebServiceTemplate webServiceTemplate(WebServiceTemplateBuilder builder) {
return builder.messageSenders(new HttpWebServiceMessageSenderBuilder()
.setConnectTimeout(5000).setReadTimeout(2000).build()).build();
}
49.创建自己的自动配置
如果您在开发共享库的公司工作,或者您在开源或商业库中工作,则可能需要开发自己的自动配置。自动配置类可以捆绑在外部jar中,仍然可以
通过Spring Boot获取。
自动配置可以与“启动器”相关联,该启动器提供自动配置代码以及您将使用它的典型库。我们首先介绍了构建自己的自动配置需要了解的内
容,然后我们将继续介绍创建自定义启动器所需的 典型步骤。
可以使用演示项目来展示如何逐步创建启动器。
49.1了解自动配置Beans
在引擎盖下,自动配置使用标准 @Configuration 类实现。额外的 @Conditional 注释用于约束何时应用自动配置。通常,自动配置类使
用 @ConditionalOnClass 和 @ConditionalOnMissingBean 注释。这可确保仅在找到相关类时以及未声明自己的 @Configuration 时才应用自
动配置。
您可以浏览源代码 spring-boot-autoconfigure 以查看Spring提供的 @Configuration 类(请参阅 META-INF/spring.factories 文
件)。
49.2找到自动配置候选者
Spring Boot检查已发布jar中是否存在 META-INF/spring.factories 文件。该文件应在 EnableAutoConfiguration 键下列出您的配置类,如
以下示例所示:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=
com.mycorp.libx.autoconfigure.LibXAutoConfiguration,
com.mycorp.libx.autoconfigure.LibXWebAutoConfiguration
如果需要按特定顺序应用配置,则可以使用 @AutoConfigureAfter 或 @AutoConfigureBefore 注释。例如,如果您提供特定于Web的配置,
则可能需要在 WebMvcAutoConfiguration 之后应用您的类。
如果您想订购某些不应该彼此直接了解的自动配置,您也可以使用 @AutoConfigureOrder 。该注释与常规 @Order 注释具有相同的语义,但为
自动配置类提供了专用顺序。
自动配置,必须加载这种方式只。确保它们是在特定的包空间中定义的,特别是它们永远不是组件扫描的目标。