最新实战案例锦集:《Spring Boot3实战案例合集》持续更新,每天至少更新一篇文章,订阅后将赠送文章最后展示的所有MD文档(学习笔记)。
环境:Spring Boot 3.2.5
1. 简介
日志记录是确保系统可维护性和可调试性的关键组成部分。为了提高系统的监控和故障排查能力,我们将通过以下3方面来实现接口的全面监控。
首先,获取项目所有可用的接口 具有多方面的实际意义。
自动生成详细的API文档可以减少手动编写文档的工作量,确保文档的准确性和及时性,从而提高开发团队之间的沟通效率。
这些接口信息可以用于自动化测试,自动生成测试用例并进行覆盖率分析,确保每次代码变更后的接口功能仍然正常,支持持续集成和持续交付流程。
通过全面了解项目中的所有接口,运维团队可以更好地监控系统性能,快速定位和解决潜在问题。同时,这也有助于安全团队进行安全审计,识别潜在的安全风险并采取相应的防护措施。
其次,接口请求耗时记录 使得开发人员能够准确地了解每个接口的响应时间。这不仅有助于识别性能瓶颈,还能为优化系统提供数据支持。将生成的日志可以进一步被可视化工具(如Grafana)分析,生成直观的性能报告。
最后,详细信息接口请求记录 包括请求参数、响应结果以及可能的异常信息。这些详细的日志记录对于问题排查至关重要,尤其是在生产环境中遇到难以复现的问题时。通过捕获请求和响应的完整上下文,开发人员可以快速定位问题原因,并采取相应的修复措施。此外,这些日志还可以用于审计和安全分析,确保系统的合规性和安全性。
接下来,我将分别详细的介绍如何在Spring Boot环境下实现这些功能。
2. 实战案例
2.1 获取项目所有可用的接口
在 Spring Boot 应用程序中,我们通过在控制器类中使用 @RequestMapping 注解来暴露 REST API 端点。要获取这些端点,有三种选择:事件监听、Spring Boot Actuator、内置的日志打印。下面将分别介绍这3种方式
事件监听
@Component
public class EventListenerConfig {
@EventListener
public void handleContextRefresh(ContextRefreshedEvent event) {
ApplicationContext applicationContext = event.getApplicationContext();
RequestMappingHandlerMapping requestMappingHandlerMapping = applicationContext
.getBean("requestMappingHandlerMapping", RequestMappingHandlerMapping.class);
Map<RequestMappingInfo, HandlerMethod> map = requestMappingHandlerMapping
.getHandlerMethods();
map.forEach((key, value) -> System.err.printf("%s, %s%n", key, value)) ;
}
}
这里我们通过监听 ContextRefreshedEvent 事件。该事件在 ApplicationContext 初始化或刷新时发布(单例bean初始化完成以后)。接着获取容器中的 RequestMappingHandlerMapping 通过它获取所有的接口定义。
控制台输出如下:
这里详细的输出了接口URI已经接口所在的类和参数的类型。
使用Actuator
使用Actuator就简单多了,引入依赖做简单的配置即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
简单配置
management:
endpoints:
web:
/ac :
exposure:
include:
- mappings
接下来,访问/ac/mappings接口
更加详细的记录了接口的详细信息。
配置日志打印
logging:
level:
debug :
# '[org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping]': trace
这里我们配置上面任意一个即可输出接口的详细信息。
这种方式由于是日志的记录方式,不利于我们管理。
总结:推荐使用第一种方式,这种方式可以更加灵活的操作数据。