朋友您好,在本教程中,我们将学习弹簧执行器及其所有功能。
1.什么是弹簧执行器?
2.如何在Maven项目或Gradle项目中添加弹簧执行器?
3.创建一个具有Spring Actuator依赖项的Spring Boot项目。
什么是弹簧执行器?
一旦您开发了应用程序并将其部署到生产环境中,就必须检查已启动并正在运行的应用程序的运行状况,这一点非常重要,特别是对于像银行应用程序这样的关键任务应用程序(如果需要面向客户的应用程序)下降,将直接影响银行业务。
以传统的方式,在使用Spring Actuator之前,我们需要编写代码来检查应用程序的运行状况,但是使用Spring Actuator,我们不需要编写任何用于运行状况检查的代码,但是Spring Actuator提供了一些现成的端点,可以对于应用程序的健康检查非常有用。
如何在Maven项目或Gradle项目中添加弹簧执行器?
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
</dependencies>
dependencies {compile("org.springframework.boot:spring-boot-starter-actuator")
}
创建一个具有Spring Actuator依赖项的Spring Boot项目
让我们继续并使用Spring Initializer https://start.spring.io/创建一个具有Spring Actuator依赖项(与Web和DevTools一起使用)的Spring Boot项目。
请注意,在撰写本教程时,Spring Boot版本为2.1.0。
在Eclipse或您选择的任何其他IDE中导入项目,然后运行SpringActuatorApplication.java。
您将在Eclipse控制台中看到以下内容:
这表明嵌入式Tomcat已在端口8080上启动,而SpringActuatorApplication已在Tomcat上启动。 同样在控制台日志中,您可以看到执行器端点通过/ actuator URI公开。
018-11-09 20:00:29.346 INFO 8338 — [restartedMain] osbwembedded.tomcat.TomcatWebServer:Tomcat在端口上启动:8080(http),具有上下文路径“
2018-11-09 20:00:29.354 INFO 8338 — [restartedMain] nbjsSpringActuatorApplication:在9.273秒内启动了SpringActuatorApplication(JVM运行11.823)
2018-11-09 20:00:29.190INFO 8338 — [restartedMain] osbaeweb.EndpointLinksResolver:在基本路径“ / actuator”下暴露2个端点。
使用弹簧执行器端点监视应用
如上所述,Spring执行器提供了一些现成的端点,可用于监视应用程序的运行状况。
ID | 描述 |
审核事件 | 公开当前应用程序的审核事件信息。 |
豆子 | 显示应用程序中所有Spring Bean的完整列表。 |
快取 | 公开可用的缓存。 |
条件 | 显示在配置和自动配置类上评估的条件以及它们匹配或不匹配的原因。 |
configprops | 显示所有@ConfigurationProperties的整理列表。 |
环保 | 从Spring的ConfigurableEnvironment中公开属性。 |
飞路 | 显示已应用的所有Flyway数据库迁移。 |
健康 | 显示应用程序运行状况信息。 |
httptrace | 显示HTTP跟踪信息(默认情况下,最近100个HTTP请求-响应交换)。 |
信息 | 显示任意应用程序信息。 |
整合图 | 显示Spring Integration图。 |
记录器 | 显示和修改应用程序中记录器的配置。 |
液基 | 显示已应用的所有Liquibase数据库迁移。 |
指标 | 显示当前应用程序的“指标”信息。 |
映射 | 显示所有@RequestMapping路径的整理列表。 |
计划任务 | 显示应用程序中的计划任务。 |
会议 | 允许从Spring Session支持的会话存储中检索和删除用户会话。 使用Spring Session对反应式Web应用程序的支持时不可用。 |
关掉 | 使应用程序正常关闭。 |
线程转储 | 执行线程转储。 |
启用端点
默认情况下,除关机外的所有端点均处于启用状态。 要启用端点,请在application.properties文件中使用以下属性。
management.endpoint.<id>.enabled
例:
要启用关闭端点,我们需要在application.properties文件中进行以下输入:
management.endpoint.shutdown.enabled=true
或者,我们可以禁用所有端点,然后有选择地启用所需的端点。 使用以下配置,将禁用除info之外的所有端点。
management.endpoints.enabled-by-default=falsemanagement.endpoint.info.enabled=true
端点执行器
让我们点击URL http:// localhost:8080 / actuator并查看端点。
注意 :我使用Postman来测试端点,因为它以结构良好的格式显示JSON。 您可以自由使用任何其他此类工具,也可以仅使用浏览器。
在Spring Actuator中公开端点
正如您已经注意到的,在这里只能看到运行状况和信息端点。 这是因为这些是默认情况下唯一公开的端点。 出于安全原因,默认情况下不会公开所有端点,因为它们可能具有一些敏感信息,因此可能会受到威胁。
暴露特定端点
如果要通过Web(Http)公开其他端点,则需要在application.properties文件中进行以下输入。
management.endpoints.web.exposure.include= <Comma separated list of Ids of endpoints which we want to expose>
例
management.endpoints.web.exposure.include= health,info,env
现在,在application.properties中添加以上条目之后,让我们再次命中URL http:// localhost:8080 / actuator。
正如我们在下面的屏幕截图中看到的那样,env端点也已启用。
公开所有端点
如果要启用所有端点,可以在application.properties中使用通配符*,如下所示。
management.endpoints.web.exposure.include=*
公开所有端点,只有少数端点除外
下面的两个条目将启用所有端点,但仅禁用环境端点。
management.endpoints.web.exposure.include=*management.endpoints.web.exposure.exclude=env
禁用HTTP端点
如果您不想通过HTTP公开端点,可以通过在application.properties中配置以下内容来完成:
management.server.port=-1
或者,您可以在application.properties中配置以下内容:
management.endpoints.web.exposure.exclude=*
自定义执行器URL以访问各种端点
默认情况下,所有Web终结点在/ actuator下都可用,其URL格式为/ actuator / {id}。
但是,可以通过在application.properties中配置以下属性来配置基本路径/执行器。
management.endpoints.web.base-path
例如,如果要将基本URL设置为/ monitor而不是/ actuator,则可以
可以在application.properties中进行如下配置:
management.endpoints.web.base-path=/monitor
这样,可以将所有端点作为/ monitor / {id}而不是/ actuator / {id}进行访问
Spring Boot执行器端点
让我们讨论一些最重要的端点。
/健康
运行状况端点将提供应用程序的状态(如果应用程序已启动且未运行)。 这对于在生产中监视应用程序的运行状况非常重要。 该端点可以与监视应用程序集成在一起,并且在告知应用程序的实时运行状况方面将非常有帮助。
健康资讯
健康终结点将公开多少信息取决于application.properties文件中属性management.endpoint.health.show-details的配置。
如果management.endpoint.health.show-details = never,则永远不会显示详细信息。 在这种情况下,您只会看到以下信息。 这也是默认行为。
如果management.endpoint.health.show-details = always,则向所有用户显示详细信息。因此,如下面的响应所示,我们也具有磁盘空间信息。 如果您的应用程序已连接到数据库,那么您还将获得有关数据库运行状况的信息。
如果management.endpoint.health.show-details =何时授权 ,则仅向授权用户显示详细信息。可以使用management.endpoint.health.roles属性配置授权角色。
自动配置的健康指标
Spring Boot Actuator具有许多自动配置的HeathIndicators,用于检查应用程序各个部分的运行状况。 例如,Spring Boot Actuator提供了DiskspaceHealthIndicator,它提供有关应用程序使用的磁盘空间的运行状况的信息。 同样,如果您使用的是MongoDB,则MongoHealthIndicator将检查Mongo DB的运行状况(是否为UP),并显示相关信息。 默认情况下,最终应用程序状态是由HealthAggregator派生的,它基本上根据状态的有序列表对每个HealthIndicator的状态进行排序。 排序列表中的第一个状态用作应用程序的最终状态。
禁用所有自动配置的运行状况指示器
这些运行状况指示器默认情况下处于启用状态,但是可以使用以下属性将其禁用:
management.health.defaults.enabled=false
禁用各个自动配置的运行状况指示器
或者,也可以如下禁用单个HealthIndicator,例如,禁用磁盘空间的运行状况检查:
management.health.diskspace.enabled=false
注意 :任何HealthIndicator的标识符将是不带有HealthIndicator后缀的Bean的名称。
例如 :
DiskSpaceHealthIndicator diskspace
MongoHealthIndicator mongo
CassandraHealthIndicator cassandra
DataSourceHealthIndicator datasource
等等…
自定义健康指标
连同Spring Boot Actuator提供的内置HealthIndicators,我们还可以创建自己的自定义Health Indicator。 为此,您需要创建一个实现HealthIndicator接口并实现其health()方法的类,并通过以下相关信息返回Health作为响应:
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;@Component
public class CustomHealthIndicator implements HealthIndicator {@Overridepublic Health health() {int errorCode = 0; // In the above line,I am simple assigning zero,but you can call Health check related code like below commented line and that method can return the appropriate code.// int errorCode = performHealthCheck();if (errorCode != 0) {return Health.down().withDetail("Error Code", errorCode).build();}return Health.up().build();}}
现在让我们再次达到运行状况终结点,看看我们的自定义运行状况指示器是否得到反映。
正如我们在上面的屏幕快照中看到的那样,自定义运行状况检查已包括在内。
每个组件的健康状况
还可以检查单个组件的运行状况。 在上面的示例中,我们看到了自定义健康状态以及diskSpace健康状态。
如果只想查看diskSpace运行状况,则可以执行以下操作:
http:// localhost:8080 / actuator / health / diskSpace
/信息
info终结点提供了有关应用程序的一般信息,该应用程序是从诸如build-info.properties或git.properties之类的文件中获取的,或者是从application.properties中关键信息下的任何属性获取的。
就像在我们的项目中一样,没有这样的文件,因此,如果我们点击info端点,它将仅显示空响应,如下所示:
如果存在META-INF / build-info.properties文件,Spring Boot Actuator将显示与构建相关的信息。 build-info目标使用项目坐标和构建时间来生成此类文件。 它还允许您添加任意数量的其他属性。
让我们在spring-boot-maven-plugin插件中,在我们项目的pom.xml中添加一个build-info目标。
<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.1.0.RELEASE</version><executions><execution><goals><goal>build-info</goal></goals><configuration><additionalProperties><encoding.source>UTF-8</encoding.source><encoding.reporting>UTF-8</encoding.reporting><java.source>${maven.compiler.source}</java.source><java.target>${maven.compiler.target}</java.target></additionalProperties></configuration></execution></executions></plugin>
现在让我们再次点击信息端点,我们可以看到如下构建信息:
另外,我们可以在application.properties的info键下添加应用程序信息,如下所示,它们将显示在/ info端点中。
info.application.name=spring-actuator
info.application.description=spring boot actuator application
info.application.version=0.0.1-SNAPSHOT
/豆子
bean端点为Spring bean容器中定义的所有bean提供有关每个bean的以下信息:
aliases : Names of any aliases
Scope : Scope of bean
type : Fully qualified type of a bean.
resource : Resource(class) in which bean is defined.
dependencies :names of dependent beans.
例如,我创建了一个名称为TestController.java的RestController,并注入了一个名称为TestService.java的bean。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class TestController {@Autowiredprivate TestService testService;@GetMapping("/messages")public String getMessage() {return "Hello";}
}
import org.springframework.context.annotation.Configuration;@Configuration
public class TestService {}
您可以在下面的ID为testController的屏幕截图中看到它的反映方式。
/ configprops
configProps端点为您提供了所有带有@ConfigurationProperties注释的bean。
在上面的屏幕截图中,我们可以看到在Spring框架本身中预定义的两个bean,并用@ConfigurationProperties注释,因此显示在此端点下。
下面的屏幕快照显示了HttpTraceProperties的源代码,该代码以@ConfigurationProperties注释。
/ env
env端点按以下顺序为您提供所有特定于环境的信息:
System Properties - JVM specific(Platform Independent)
System Env. or Env. Variables - Operating System specific(Platform Dependent)
application level configuration - Defined in application.properties
/堆转储
heapdump端点提供了来自应用程序JVM的堆转储。 该端点以HPROF格式返回二进制数据。 由于返回的数据通常很大,因此您应该保存并进行分析。
/记录器
loggers端点提供应用程序的记录器以及它们的configureLevel,effectiveLevel(如果此记录器的配置级别为null,并且其父级也为配置级别,则有效级别将为根记录器的记录器级别)。
levels属性告诉日志记录框架支持哪些所有级别。
特定记录器的记录器信息
要获取特定记录器的记录器信息,请在/ loggers端点后面的URL中传递记录器的名称/ ID,如下所示:
http:// localhost:8080 / actuator / loggers / nl.blogpsot.javasolutionsguide.springactuator.SpringActuatorApplication
指标终结点为您提供了可以为应用程序跟踪的所有指标。
检查单个指标
您可以通过将特定指标传递到/ metrics端点之后的URL来跟踪单个指标,如下所示:
http:// localhost:8080 / actuator / metrics / jvm.memory.used
一切都在Spring Actuator上,感谢阅读。 请与他人分享,您认为这可能会有所帮助。
翻译自: https://www.javacodegeeks.com/2018/11/spring-boot-actuator-tutorial.html