通过 AOP 实现接口性能监控,自动记录每个接口的执行时间、请求路径等性能指标。
1.引入AOP所需依赖
添加 Spring AOP 框架依赖以支持切面编程功能。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
通过 AOP 实现接口性能监控,自动记录每个接口的执行时间、请求路径等性能指标。
添加 Spring AOP 框架依赖以支持切面编程功能。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
全局异常处理机制用于捕获和处理应用程序中未被捕获的异常,提供统一的异常处理流程和响应格式。该机制不仅能够确保系统在发生异常时返回标准化的错误信息,还可以根据需要自定义异常处理后的操作,如将异常信息记录到数据库中进行后续分析。
注意
使用全局异常处理向数据库记录日志功能前,需要先完成异步记录日志的相关配置,如不需要此功能可以跳过相关配置。
采用事件驱动模式实现异步记录登录日志到数据库,通过 Spring 的事件发布/监听机制将日志记录操作与业务逻辑解耦,避免日志记录对业务处理性能的影响。
配置异步执行所需的线程池资源和异常处理策略。
@Configuration
@EnableAsync
@Slf4j
public class AsyncConfig implements AsyncConfigurer {
/**
* 创建异步线程池
*
* @return 线程池
*/
@Override
public @Nullable Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(2);
executor.setMaxPoolSize(5);
executor.setQueueCapacity(1000);
// 设置线程名称前缀,方便查看日志
executor.setThreadNamePrefix("log-async-");
executor.initialize();
return executor;
}
/**
* 异步任务异常处理
*
* @return 异常处理
*/
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return (throwable, method, params) -> {
log.error("异步任务执行异常: ", throwable);
log.error("异常方法: {}.{}", method.getDeclaringClass().getSimpleName(), method.getName());
};
}
}
地址工具类通过集成高德地图 API 实现根据用户 IP 地址查询地理位置信息的功能。
使用高德地图 IP 定位 API提供的 IP 地址定位服务,该服务能够根据 IP 地址返回对应的地理位置信息。
addre.url: 高德地图 IP 定位 API 的请求地址address.key: 高德地图开发者密钥,用于 API 调用认证IP 工具类用于获取用户真实 IP 地址,通过多种 HTTP 头信息和请求参数来获取客户端的原始 IP 地址,有效处理了经过代理服务器、负载均衡器等网络设备转发后的情况。
按照优先级依次从以下 HTTP 头中获取 IP 地址:
X-Forwarded-ForX-Real-IPX-Forwarded-HostProxy-Client-IPWL-Proxy-Client-IPHTTP_CLIENT_IPHTTP_X_FORWARDED_FORrequest.getRemoteAddr() 获取原始 IPWebClient 是 Spring WebFlux 提供的非阻塞式 HTTP 客户端,它支持同步和异步的调用方式,适合高并发场景下的服务通信。
在项目中引入 WebFlux 依赖来实现 HTTP 请求发送功能。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
本项目使用 Spring Security 实现认证授权功能,结合 JWT 和 Redis 实现无状态认证机制。
在项目中引入 Spring Security 和 JWT 相关依赖来实现认证授权功能。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.13.0</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.13.0</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.13.0</version>
</dependency>
在项目中添加以下依赖以启用 Redis 功能。
<!-- Spring Boot Redis Starter 依赖,提供 Redis 相关功能支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- Alibaba FastJSON2 依赖,用于高性能的 JSON 序列化和反序列化 -->
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.60</version>
</dependency>
通过 Maven 依赖引入 Swagger3 相关组件,为项目提供 API 文档生成功能支持。
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.8.13</version>
</dependency>
通过在pom.xml中配置 Profile,可以便捷地实现不同运行环境间的切换。
在pom.xml文件中定义多个环境 Profile。
<profiles>
<profile>
<id>dev</id>
<properties>
<profileActive>dev</profileActive>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<profileActive>prod</profileActive>
</properties>
</profile>
</profiles>