掌握这3个Spring Boot技能,实时监控Controller接口性能

文摘   2024-10-24 20:00   新疆  

最新实战案例锦集:《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种方式

  • 事件监听

@Componentpublic 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:      base-path: /ac      exposure:        include:        - mappings

接下来,访问/ac/mappings接口

更加详细的记录了接口的详细信息。

  • 配置日志打印

logging:  level:    '[_org.springframework.web.servlet.HandlerMapping.Mappings]': debug#    '[org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping]': trace

这里我们配置上面任意一个即可输出接口的详细信息。

这种方式由于是日志的记录方式,不利于我们管理。

总结:推荐使用第一种方式,这种方式可以更加灵活的操作数据。

Spring全家桶实战案例源码
spring, springboot, springcloud 案例开发详解
 最新文章