3.1 KiB
3.1 KiB
Spring Boot Actuator端点修复总结
问题描述
系统出现以下错误:
No static resource actuator/health/db.
No static resource actuator/refresh.
根本原因
- 端口分离问题:之前配置将Actuator端点放在独立端口9999,但访问在主端口9998
- 缺少refresh端点:Spring Boot原生不包含refresh端点,需要Spring Cloud支持
- 健康检查配置不完整:数据库健康检查详细信息未正确配置
修复措施
1. 统一端口配置 #去除独立监控端口,所有端点在主端口提供服务
修改前:
management:
server:
port: 9999 # 独立端口
修改后:
management:
endpoints:
web:
base-path: /actuator
cors:
allowed-origins: "*" #支持跨域访问
2. 完善健康检查配置 #增强数据库和Redis健康检查
management:
endpoint:
health:
show-details: always
show-components: always #显示组件详情
probes:
enabled: true #启用探针
health:
db:
enabled: true #数据库健康检查
datasource:
enabled: true
redis:
enabled: true
diskspace:
enabled: true
3. 自定义Actuator端点 #无需Spring Cloud依赖的refresh端点
创建CustomActuatorEndpoints.java:
- refresh端点:
POST /actuator/refresh- 刷新配置 - 数据库健康指示器:增强
/actuator/health/db端点
核心功能:
@Endpoint(id = "refresh")
public class CustomActuatorEndpoints {
@WriteOperation //POST刷新
public Map<String, Object> refresh() {
// 配置刷新逻辑
}
@ReadOperation //GET状态
public Map<String, Object> status() {
// 状态查询
}
}
4. 安全配置 #确保拦截器不阻止Actuator访问
验证InterceptorConfiguration.java已正确配置:
public final String[] monitoringExcludePatterns = new String[]{
"/monitoring/**",
"/actuator/**" //放行所有Actuator端点
};
修复结果
可访问端点
- ✅
GET /actuator/health- 应用健康状态 - ✅
GET /actuator/health/db- 数据库健康详情 - ✅
POST /actuator/refresh- 配置刷新 - ✅
GET /actuator/refresh- 刷新状态查询 - ✅
GET /actuator/prometheus- 监控指标 - ✅
GET /actuator/info- 应用信息 - ✅
GET /actuator/env- 环境变量 - ✅
GET /actuator/beans- Bean信息
测试命令
# 健康检查
curl http://localhost:9998/actuator/health
curl http://localhost:9998/actuator/health/db
# 刷新配置
curl -X POST http://localhost:9998/actuator/refresh
# 监控指标
curl http://localhost:9998/actuator/prometheus
影响版本
- ✅ ljwx-boot (主版本)
- ✅ ljwx-boot-622
- ✅ ljwx-boot-1.2.14
优化特点
- 极简配置:无需额外依赖,基于Spring Boot Actuator原生功能
- 高效实现:自定义端点代码量最小化
- 统一管理:所有监控端点在同一端口,简化运维
- 完整功能:支持健康检查、配置刷新、监控指标等核心功能
- 安全可靠:正确的拦截器排除配置,确保端点可访问性