Actuator:应用的体检面板
应用上线后,你怎么知道它活着?内存吃了多少?配置加载了哪些?Actuator 内置了一组 HTTP 端点,暴露这些运行时信息。生产环境把它接进 Prometheus + Grafana,就是一套监控。
| 端点 | 返回什么 |
|---|---|
/actuator/health | 健康状态:UP / DOWN。负载均衡器靠它探活。 |
/actuator/info | 应用自定义信息,从配置文件读。 |
/actuator/metrics | JVM 内存、线程数、HTTP 请求耗时等指标。 |
/actuator/env | 所有环境变量和配置项(含脱敏)。 |
/actuator/beans | 容器里所有 Bean 的清单和依赖关系。 |
/actuator/mappings | 所有 URL 路径对应的 Controller 方法。 |
application.yml 开启端点
定时任务:@Scheduled
Spring Boot 自带定时任务,不用装 Quartz。主启动类加 @EnableScheduling,业务方法贴 @Scheduled 就行。
每天凌晨 2 点跑一次统计任务
异步方法:@Async 别让主线程干等
接口里要"发短信、发邮件、写日志",这些不该让用户等着——主启动类加 @EnableAsync,方法贴 @Async,Spring 自动丢到线程池里异步跑,主线程立刻返回。
和 @Transactional 一样,@Async 靠代理生效,同类内部 this 调用不走代理,异步失效。要从另一个 Bean 调进来。另外默认线程池很小,高并发场景要自己配 ThreadPoolTaskExecutor,别让任务排队堆积。
1.(概念题)Actuator 是什么?常用端点有哪些?
查看答案
答案:它给应用加了一套 HTTP/JMX 监控端点:/health(健康检查)、/metrics(指标)、/env(配置)、/loggers(动态改日志级别)、/info。K8s 用 /health 做存活探针。解析:默认只暴露 /health 和 /info,其他要在 yml 里 management.endpoints.web.exposure.include 打开。
2.(安全题)Actuator 端点能不能直接暴露到公网?
查看答案
答案:不能。/env、/heapdump 这类端点会泄露配置和内存,必须加 Spring Security 认证,或只在内网/管理端口暴露。解析:生产环境一定要收敛暴露的端点并加权限控制。