Spring Boot执行器端点

Spring Boot Actuator端点允许我们监控和与我们的应用程序进行交互。Spring Actuator是Spring Boot的一个子模块,提供了内置的端点,我们可以为我们的应用程序启用和禁用。

Spring Boot Actuator 终端节点

Spring Boot的Actuator端点通过JMX和HTTP公开,大多数情况下我们使用基于HTTP的Actuator端点,因为它们易于在浏览器、CURL命令、shell脚本等中访问。一些有用的Actuator端点包括:

    1. 豆子:此端点返回我们应用程序中配置的所有豆子的列表。

 

    1. 环境:提供有关Spring环境属性的信息。

 

    1. 健康:显示应用程序的健康状况。

 

    1. 信息:显示应用程序的信息,我们可以在Spring环境属性中进行配置。

 

    1. 映射:显示所有@RequestMapping路径的列表。

 

    1. 关闭:允许我们优雅地关闭应用程序。

 

    线程转储:提供应用程序的线程转储。

你可以从这里获取完整的Spring Actuator端点列表。

Spring Actuator 端点安全

只有“health”和“info”端点是暴露给所有人的,没有任何安全性可言,要访问其他端点,我们需要为我们的应用程序配置Spring安全性。这是非常容易实现的,我们将在教程的后半部分介绍它。

启用 Spring Actuator 端点

当我们向我们的Spring Boot项目中添加Spring Actuator依赖时,它会自动启用Actuator端点。在您的Spring应用程序中添加以下依赖项以启用Spring Boot Actuator端点。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

现在当您运行应用程序时,您将在日志中看到活动端点的映射。

2018-06-19 15:23:20.715  INFO 6493 --- [main] o.s.b.a.e.web.EndpointLinksResolver: Exposing 2 endpoint(s) beneath base path '/actuator'
2018-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>)
2018-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>)
spring boot actuator endpoint info
info.app.name=Spring Actuator Example
info.app.java.version=10
info.app.type=Spring Boot
spring boot actuator info properties value

自定义执行器端点的基本路径

默认情况下,执行器端点的基本路径为/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用于Actuator端点。

请注意,我们需要为我们的应用程序添加Spring Security以启用额外的端点,因为所有其他端点都需要至少基本身份验证。在您的应用程序中添加以下Spring Security依赖项。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-security</artifactId>
</dependency>

同时,在应用程序属性文件中添加Spring Security的用户名和密码。

spring.security.user.name=scdev
spring.security.user.password=scdev

重新启动应用程序,您将看到额外的端点被映射。

2018-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>)
2018-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>)
2018-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>)
spring boot actuator endpoint env java.home

Spring Actuator自定义终端

Spring框架的一个重要特点之一就是它非常容易扩展。我们可以使用@class注解在类上创建自定义的执行器端点。然后,我们必须在方法上使用@ReadOperation、@WriteOperation或@DeleteOperation注解,将它们暴露为执行器端点的bean。我们可以使用@JmxEndpoint和@WebEndpoint注解来创建特定技术的端点。以下是一个自定义的Spring执行器端点示例。

package com.Olivia.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

现在当您启动应用程序时,请在日志中检查是否有此新终点进行了映射。

2018-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>)
spring boot actuator custom endpoint

总结

Spring Boot Actuator 是一个生产就绪的管理和信息模块。
我们可以轻松扩展它以添加自己的API,并管理我们的应用程序。

您可以从我们的GitHub存储库中下载完整的项目。

发表回复 0

Your email address will not be published. Required fields are marked *


广告
将在 10 秒后关闭
bannerAds