Spring启动执行器端点
通过Spring Boot Actuator端点,我们可以监控应用程序并与之交互。
Spring Actuator是Spring Boot子模块,提供了内置端点,我们可以为应用程序启用和禁用这些端点。
Spring启动执行器端点(Spring Boot Actuator Endpoint)
Spring Boot Actuator端点通过JMX和HTTP公开,大多数时候我们使用基于HTTP的Actuator端点,因为它们可以通过浏览器,CURL命令,shell脚本等轻松访问。
一些有用的执行器端点是:
beans:此端点返回在我们的应用程序中配置的所有bean的列表。
env:提供有关Spring Environment属性的信息。
运行状况:显示应用程序运行状况
info:显示应用程序信息,我们可以在Spring环境属性中进行配置。
映射:显示所有@RequestMapping路径的列表。
shutdown:允许我们正常关闭应用程序。
threaddump:提供应用程序的线程转储。
您可以从此处获取Spring执行器端点的完整列表。
Spring执行器端点安全
仅公开"健康"和"信息"端点而没有任何安全性,为了访问所有其他端点,我们需要为弹簧安全性配置应用程序。
这很容易实现,我们将在本教程的后面部分中进行介绍。
启用Spring执行器端点
当我们将Spring Actuator Dependencies添加到我们的Spring Boot项目中时,它会自动启用执行器端点。
在spring应用程序中添加以下依赖项,以启用spring boot致动器端点。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
现在,当您运行该应用程序时,您将看到在日志中映射了执行器端点。
2016-06-19 15:23:20.715 INFO 6493 --- [main] o.s.b.a.e.web.EndpointLinksResolver: Exposing 2 endpoint(s) beneath base path '/actuator' 2016-06-19 15:23:20.723 INFO 6493 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/health],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>) 2016-06-19 15:23:20.724 INFO 6493 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/info],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
注意,只有两个端点-" health"和" info"已被映射。
下图显示了这些执行器端点的输出。
您是否注意到/actuator/info
中没有数据,这是因为我们尚未配置它们。
只需将以下属性添加到您的application.properties文件即可。
info.app.name=Spring Actuator Example info.app.java.version=10 info.app.type=Spring Boot
重新启动应用程序,您将获得以下输出:
自定义执行器终点基本路径
默认情况下,执行器端点的基本路径是"/actuator",我们可以通过在应用程序属性文件中设置" management.endpoints.web.base-path"将其更改为任何其他值。
management.endpoints.web.base-path=/management
暴露其他执行器端点
我们可以通过属性文件启用和禁用其他执行器端点。
如果要启用所有执行器端点,请添加以下属性。
management.endpoints.web.exposure.include=*
要仅启用特定的执行器端点,请提供端点ID列表。
management.endpoints.web.exposure.include=health,info,beans,env
执行器端点的Spring Security
注意,我们需要将Spring Security添加到我们的应用程序中以启用其他端点,因为所有其他端点都至少需要基本身份验证。
在您的应用程序中添加以下对Spring安全性的依赖性。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
另外,在应用程序属性文件中添加spring security用户名和密码。
spring.security.user.name=hyman spring.security.user.password=hyman
重新启动应用程序,您将看到正在映射的其他端点。
2016-06-19 16:18:22.211 INFO 6627 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/beans],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>) 2016-06-19 16:18:22.212 INFO 6627 --- [ main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/env],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>) 2016-06-19 16:18:22.212 INFO 6627 --- [ main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/env/{toMatch}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
现在,当您尝试访问安全的执行器端点时,您将必须提供登录凭证。
下图显示了bean和env/java.home端点的响应。
Spring执行器自定义端点
Spring Framework的一大功能是扩展非常容易。
我们可以在类上使用@Endpoint注释创建自己的自定义执行器端点。
然后,我们必须在方法上使用@ ReadOperation,@ WriteOperation或者@DeleteOperation注释,以将它们公开为执行器端点bean。
我们可以使用@JmxEndpoint和@WebEndpoint批注来创建特定于技术的端点。
这是我们自己的定制Spring执行器端点的示例。
package com.theitroad.spring; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; @Endpoint(id="myendpoint") @Component public class MyCustomEndpoints { @ReadOperation @Bean public String hi() { return "Hi from custom endpoint"; } }
您注意到端点ID了吗?我们还需要在要启用的执行器端点列表中进行配置。
更新" application.properties"文件中的以下属性。
management.endpoints.web.exposure.include=health,info,beans,env,myendpoint
现在,当您启动应用程序时,请检查日志中是否映射了该新端点。
2016-06-19 17:06:59.743 INFO 6739 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/myendpoint],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)