最新实战案例锦集:《Spring Boot3实战案例合集》持续更新,每天至少更新一篇文章,订阅后将赠送文章最后展示的所有MD文档(学习笔记)。
环境:SpringBoot.2.7.18
1. 简介
Spring Boot包括许多附加特性,可以帮助你在将应用程序投入生产环境时监视和管理它。你可以选择使用HTTP或JMX来管理和监视应用程序。审计、运行状况和指标收集也可以自动应用于你的应用程序。
spring-boot-actuator模块提供了Spring Boot所有生产环境可用的特性
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Actuator端点可让你监控应用程序并与之交互。Spring Boot 包含许多内置端点,还可以添加自己的端点。例如,health 端点提供基本的应用程序健康信息。
关于Actuator都提供了哪些Endpoints自行查看官方文档。
2. 强大的功能
2.1 跨域支持
management:
endpoints:
web:
cors:
allow-credentials: true
allowed-headers: '*'
allowed-origins: ''
2.2 自定义Endpoint
通过 @Endpoint 注解可以轻松实现自定义的Endpoint。
// id相当于@RequestMapping中设置的uri
"pack") (id =
public class PackEndpoint {
public CustomData getData() {
return new CustomData("Custom Endpoint");
}
public void writeData(String title) {
System.out.printf("修改标题:%s%n", title) ;
}
static class CustomData {
private String title ;
public CustomData(String title) {
this.title = title ;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
}
写操作
2.3 应用健康信息
默认访问/health返回如下信息
通过如下参数显示更多的信息
management:
endpoint:
health:
show-details: always
这里根据你当前的环境显示了数据库及磁盘信息。
控制db或disk相关信息
management:
endpoint:
health:
show-details: always
health:
db:
enabled: false
diskspace:
enabled: true
如你当前环境还存在redis或rabbit等中间件,那么都可以通过上面的方式进行控制。
management:
endpoint:
health:
show-details: when-authorized
当将值配置为如上时,这需要我们集成Spring Security框架,进行认证授权。同时可以指定具体拥有访问详细信息的角色。
management:
endpoint:
health:
show-details: when-authorized
roles:
- ROLE_ADMIN
如果上配置后,只有当前登录人具有ADMIN角色的人才能查看健康状态的详细信息。否则,只能查看到status: "UP" 这样的信息。
2.4 自定义健康指标
要提供自定义健康信息,可以注册实现HealthIndicator接口的Spring bean。你需要提供health()方法的实现,并返回健康响应。健康响应应包括状态,并可选择包括要显示的其他详细信息。
@Component
public class PackHealthIndicator implements HealthIndicator {
@Override
public Health health() {
int errorCode = check() ;
if (errorCode != 0) {
return Health.down().withDetail("Error Code", errorCode).build();
}
return Health.up().build() ;
}
private int check() {
return new Random().nextInt(2) ;
}
}
访问/health接口后,你会看到"status": "UP"切换中。
2.5 HTTP请求跟踪
你可以通过在应用程序配置中提供HttpTraceRepository类型的bean来启用HTTP跟踪。为了方便起见,Spring Boot提供了InMemoryHttpTraceRepository,用于存储最近100个(默认)请求-响应交换的跟踪信息。生产环境应该使用如Zipkin或Spring Cloud Sleuth。或者,你可以创建自己的HttpTraceRepository。
通过使用/httptrace端点来获取存储在HttpTraceRepository中的请求-响应交换的信息。
@Bean
InMemoryHttpTraceRepository inMemoryHttpTraceRepository() {
return new InMemoryHttpTraceRepository() ;
}
任意请求HTTP接口后,/httptrace
通过如下方式细化配置
management:
trace:
http:
include:
- request-headers
- response-headers
支持如下属性配置
2.6 安全审计
使用了Spring Security之后,Spring Boot Actuator就有了一个灵活的审计框架,可以发布事件(默认情况下,“身份验证成功”、“失败”和“访问被拒绝”异常)。此功能对于报告和实现基于身份验证失败的锁定策略非常有用。
通过在应用程序配置中提供AuditEventRepository类型的bean来启用审计。为了方便起见,Spring Boot提供了InMemoryAuditEventRepository。对于生产环境,请考虑创建自己的替代AuditEventRepository实现。
@Bean
SecurityFilterChain actuatorSecurityFilterChain(HttpSecurity http) throws Exception {
http.csrf(csrf -> csrf.disable());
http.authorizeHttpRequests().antMatchers("/ac/**").hasRole("ACTUATOR") ;
http.authorizeHttpRequests().anyRequest().permitAll() ;
http.formLogin(customizer -> Customizer.withDefaults()) ;
return http.build() ;
}
@Bean
InMemoryAuditEventRepository auditEventRepository() {
return new InMemoryAuditEventRepository() ;
}
2.7 进程监控
在spring-boot模块中,你通过下面两个类用来创建文件,它们通常用于监控进程。
ApplicationPidFileWriter:
创建一个包含应用程序 PID 的文件(默认情况下位于应用程序目录下,文件名为 application.pid)。
WebServerPortFileWriter:
创建一个(或多个)文件,其中包含运行中的网络服务器的端口(默认情况下位于应用程序目录下,文件名为 application.port)。
在项目中新建META-INF/spring.factories文件添加如下内容:
\ =
org.springframework.boot.context.ApplicationPidFileWriter,\
org.springframework.boot.web.context.WebServerPortFileWriter
启动服务后,在项目的跟目录下会分别建立如下文件:
以上是本篇文章的全部内容,如对你有帮助帮忙点赞+转发+收藏
推荐文章
必学!Spring Boot结合MDC全方位的日志跟踪(支持跨线程)
在Spring Boot中具有多个实现的接口正确注入的6种方式