SpringBoot学习(十)Spring集成、会话、(监视和管理JMX)、WebSockets和web服务
一、Spring集成
Spring Boot为使用Spring Integration提供了一些便利,包括spring-boot-starter-integration “Starter”。Spring Integration提供了消息传递和其他传输(如HTTP、TCP等)的抽象。如果Spring Integration在类路径上可用,则通过@EnableIntegration注释初始化它。
Spring Boot还配置了一些由附加的Spring Integration模块触发的功能。如果spring-integration-jmx也在类路径上,则通过JMX发布消息处理统计信息。如果spring-integration-jdbc可用,则可以在启动时创建默认的数据库模式,如下行所示:
spring.integration.jdbc.initialize-schema=always
有关更多细节,请参见IntegrationAutoConfiguration和IntegrationProperties类。
默认情况下,如果存在Micrometer meterRegistry bean, Spring Integration的度量将由Micrometer管理。如果希望使用遗留的Spring Integration指标,请将DefaultMetricsFactory bean添加到应用程序上下文。
二、Spring会话
Spring Boot为各种数据存储提供了Spring会话自动配置。在构建Servlet web应用程序时,可以自动配置以下存储:
-
JDBC
-
Redis
-
Hazelcast
-
MongoDB
在构建反应性web应用程序时,可以自动配置以下存储:
-
Redis
-
MongoDB
如果类路径上存在一个Spring会话模块,Spring Boot将自动使用该存储实现。如果有多个实现,则必须选择要用于存储会话的StoreType。例如,要使用JDBC作为后端存储,您可以如下配置您的应用程序:
spring.session.store-type=jdbc
您可以通过设置store-type为none来禁用Spring会话。
每个存储都有特定的附加设置。例如,可以为JDBC存储定制表的名称,如下面的示例所示:
spring.session.jdbc.table-name=SESSIONS
你可以通过配置spring.session.timeout来设置会话超时,如果没有配置,自动配置将使用server.servlet.session.timeout的值。
三、监视和管理JMX
Java管理扩展(JMX)提供了监视和管理应用程序的标准机制。Spring Boot将最合适的MBeanServer作为bean公开,其ID为MBeanServer。任何使用Spring JMX注释(@ManagedResource、@ManagedAttribute或@ManagedOperation)进行注释的bean都将公开给它。
如果您的平台提供了一个标准的MBeanServer, Spring Boot将使用它并在必要时将其默认为VM MBeanServer。如果这些都失败了,就会创建一个新的MBeanServer。
四、WebSockets
Spring Boot为嵌入式Tomcat、Jetty和Undertow提供了WebSockets自动配置。如果将war文件部署到独立容器,Spring Boot假设容器负责配置其WebSocket支持。
Spring Framework为MVC web应用程序提供了丰富的WebSocket支持,可以通过spring-boot-starter-websocket模块轻松访问这些web应用程序。
WebSocket支持也可用于反应性web应用程序,需要在spring-boot-starter-webflux中包含WebSocket API:
<dependency> <groupId>javax.websocket</groupId> <artifactId>javax.websocket-api</artifactId> </dependency>
五、Web服务
Spring Boot提供了Web服务自动配置,因此您只需定义端点即可。
Spring Web服务特性可以通过spring-boot-starter-webservices模块轻松访问。
可以分别为您的wsdl和xsd自动创建SimpleWsdl11Definition和SimpleXsdSchema bean。为此,配置它们的位置,如下面的示例所示:
spring.webservices.wsdl-locations=classpath:/wsdl
1.使用WebServiceTemplate调用Web服务
如果需要从应用程序调用远程Web服务,可以使用WebServiceTemplate类。由于WebServiceTemplate实例通常需要在使用之前进行自定义,因此Spring Boot不提供任何单个自动配置的WebServiceTemplate bean。但是,它会自动配置WebServiceTemplateBuilder,可以在需要时使用它创建WebServiceTemplate实例。
下面的代码展示了一个典型的例子:
@Service public class MyService { private final WebServiceTemplate webServiceTemplate; public MyService(WebServiceTemplateBuilder webServiceTemplateBuilder) { this.webServiceTemplate = webServiceTemplateBuilder.build(); } public DetailsResp someWsCall(DetailsReq detailsReq) { return (DetailsResp) this.webServiceTemplate.marshalSendAndReceive(detailsReq, new SoapActionCallback(ACTION)); } }
默认情况下,WebServiceTemplateBuilder使用类路径上可用的HTTP客户端库检测合适的基于HTTP的WebServiceMessageSender。您还可以自定义读取和连接超时如下:
@Bean public WebServiceTemplate webServiceTemplate(WebServiceTemplateBuilder builder) { return builder.messageSenders(new HttpWebServiceMessageSenderBuilder() .setConnectTimeout(5000).setReadTimeout(2000).build()).build(); }