---
description: Spring Boot 3 企业级最佳实践规范
globs: **/*.java
alwaysApply: false
---

# Spring Boot 3 企业级最佳实践规范

## 1. 配置管理模块

### 1.1 配置文件组织
- **主配置文件**：`application.yml` 包含通用配置
- **环境配置**：`application-{profile}.yml` 按环境分离
- **配置优先级**：命令行参数 > 环境变量 > 配置文件
- **敏感信息**：使用环境变量或配置中心，禁止硬编码

### 1.2 配置属性绑定
- 使用 `@ConfigurationProperties` 进行类型安全的配置绑定
- 配置类使用 `@Validated` 进行参数校验
- 复杂配置使用嵌套类结构
- 提供默认值和配置文档

### 1.3 多环境管理
- **开发环境**：本地数据库，详细日志，热重载
- **测试环境**：内存数据库，模拟外部服务
- **生产环境**：外部配置，最小日志级别，性能监控

### 1.4 配置最佳实践
- 配置项命名使用 kebab-case
- 布尔值配置明确语义（enabled/disabled）
- 数值配置包含单位说明
- 定期审查和清理无用配置

## 2. 依赖注入模块

### 2.1 Bean 定义策略
- **组件扫描**：使用 `@Component`、`@Service`、`@Repository`、`@Controller`
- **配置类**：复杂 Bean 使用 `@Configuration` + `@Bean`
- **条件注册**：使用 `@ConditionalOn*` 注解进行条件装配
- **作用域管理**：明确 Bean 的生命周期和作用域

### 2.2 依赖注入方式
- **构造器注入**：推荐方式，保证依赖不可变
- **字段注入**：仅在测试中使用 `@Autowired`
- **Setter注入**：可选依赖使用
- **避免循环依赖**：重构代码结构，使用事件驱动

### 2.3 Bean 生命周期管理
- 使用 `@PostConstruct` 和 `@PreDestroy` 管理生命周期
- 实现 `InitializingBean` 和 `DisposableBean` 接口
- 资源清理在销毁方法中进行
- 异步初始化使用 `@Async` 注解

### 2.4 依赖注入最佳实践
- 接口编程，面向抽象依赖
- 使用 `@Qualifier` 解决多实现问题
- 避免过度依赖，保持类的单一职责
- 使用 `@Primary` 指定默认实现

## 3. 安全模块

### 3.1 认证机制
- **JWT 认证**：无状态认证，适合分布式应用
- **OAuth2 集成**：第三方登录和授权
- **多因素认证**：提高安全级别
- **会话管理**：合理设置超时和并发控制

### 3.2 授权策略
- **基于角色**：RBAC 模型，角色权限分离
- **基于资源**：细粒度权限控制
- **方法级安全**：使用 `@PreAuthorize` 和 `@PostAuthorize`
- **URL 级安全**：配置路径访问规则

### 3.3 数据安全
- **输入验证**：所有外部输入必须验证
- **SQL 注入防护**：使用参数化查询
- **XSS 防护**：输出编码和 CSP 策略
- **CSRF 防护**：API 使用 Token 验证

### 3.4 安全配置最佳实践
- 最小权限原则，默认拒绝访问
- 敏感操作记录审计日志
- 定期更新安全依赖
- 使用 HTTPS 和安全头配置

## 4. 性能优化模块

### 4.1 应用层优化
- **连接池配置**：数据库、Redis、HTTP 客户端
- **线程池调优**：异步任务和定时任务
- **JVM 参数**：堆内存、GC 策略、监控参数
- **启动优化**：延迟初始化、条件装配

### 4.2 缓存策略
- **本地缓存**：Caffeine 用于热点数据
- **分布式缓存**：Redis 用于共享数据
- **缓存层次**：L1（本地）+ L2（分布式）
- **缓存更新**：写入时更新、定时刷新、事件驱动

### 4.3 数据库优化
- **连接池配置**：HikariCP 参数调优
- **查询优化**：索引使用、分页查询、批量操作
- **事务管理**：只读事务、事务传播、超时设置
- **读写分离**：主从配置、路由策略

### 4.4 监控和诊断
- **应用指标**：JVM、业务指标、自定义指标
- **性能分析**：慢查询、热点方法识别
- **告警机制**：阈值监控、异常告警
- **健康检查**：Actuator 端点监控应用状态

## 5. 数据访问模块

### 5.1 JPA 最佳实践
- **实体设计**：合理的表关系、字段映射、索引策略
- **Repository 模式**：继承 JpaRepository，自定义查询方法
- **查询优化**：使用 `@Query` 注解、原生 SQL、Specification
- **懒加载策略**：避免 N+1 问题，合理使用 `@EntityGraph`

### 5.2 事务管理
- **声明式事务**：`@Transactional` 注解配置
- **事务传播**：根据业务场景选择传播行为
- **只读事务**：查询操作使用 `readOnly = true`
- **事务超时**：设置合理的超时时间

### 5.3 数据库连接管理
- **连接池配置**：最大连接数、超时设置、健康检查
- **多数据源**：主从分离、分库分表支持
- **连接泄漏检测**：监控长时间占用的连接
- **数据库监控**：连接数、慢查询、死锁检测

### 5.4 数据访问安全
- **参数化查询**：防止 SQL 注入
- **数据脱敏**：敏感数据加密存储
- **访问控制**：数据库用户权限最小化
- **审计日志**：记录数据变更操作

## 6. API 设计模块（RESTful）

### 6.1 URL 设计规范
- **资源命名**：使用名词复数形式，避免动词
- **层次结构**：体现资源间的关系
- **版本控制**：URL 路径或请求头中包含版本信息
- **查询参数**：过滤、排序、分页使用查询参数

### 6.2 HTTP 方法使用
- **GET**：获取资源，幂等操作
- **POST**：创建资源，非幂等操作
- **PUT**：完整更新资源，幂等操作
- **PATCH**：部分更新资源
- **DELETE**：删除资源，幂等操作

### 6.3 响应设计
- **状态码**：正确使用 HTTP 状态码
- **响应格式**：统一的 JSON 响应结构
- **错误处理**：标准化错误响应格式
- **分页响应**：包含总数、页码、页大小信息

### 6.4 API 文档和测试
- **OpenAPI 规范**：使用 Swagger 生成文档
- **接口测试**：单元测试、集成测试、契约测试
- **版本兼容**：向后兼容性保证
- **性能测试**：接口响应时间和并发测试

## 7. 异常处理模块

### 7.1 异常分类
- **业务异常**：可预期的业务逻辑异常
- **系统异常**：不可预期的技术异常
- **验证异常**：参数校验失败异常
- **外部服务异常**：第三方服务调用异常

### 7.2 异常处理策略
- **全局异常处理**：使用 `@ControllerAdvice` 统一处理
- **异常转换**：将底层异常转换为业务异常
- **异常日志**：记录异常堆栈和上下文信息
- **用户友好**：返回用户可理解的错误信息

### 7.3 异常响应格式
- **错误码**：业务错误码和 HTTP 状态码
- **错误信息**：简洁明了的错误描述
- **详细信息**：开发环境提供详细错误信息
- **请求追踪**：包含请求 ID 便于问题定位

### 7.4 异常监控
- **异常统计**：异常类型、频率统计
- **告警机制**：异常阈值告警
- **异常分析**：定期分析异常趋势
- **异常恢复**：自动重试和降级策略

## 8. 测试模块

### 8.1 测试分层策略
- **单元测试**：测试单个类或方法，使用 Mock
- **集成测试**：测试组件间交互，使用 TestContainers
- **端到端测试**：完整业务流程测试
- **性能测试**：负载测试、压力测试

### 8.2 测试工具和框架
- **JUnit 5**：测试框架，支持参数化测试
- **Mockito**：Mock 框架，模拟依赖对象
- **TestContainers**：集成测试中使用真实数据库
- **WireMock**：模拟外部 HTTP 服务

### 8.3 测试数据管理
- **测试数据隔离**：每个测试独立的数据环境
- **数据准备**：使用 `@Sql` 或 Builder 模式
- **数据清理**：测试后清理数据，避免影响其他测试
- **测试数据工厂**：统一的测试数据创建

### 8.4 测试质量保证
- **代码覆盖率**：目标覆盖率 80% 以上
- **测试命名**：清晰的测试方法命名
- **断言明确**：使用有意义的断言消息
- **测试维护**：定期更新和重构测试代码

## 9. 日志记录模块

### 9.1 日志级别管理
- **ERROR**：系统错误，需要立即处理
- **WARN**：警告信息，需要关注
- **INFO**：重要业务信息，正常流程记录
- **DEBUG**：调试信息，开发环境使用

### 9.2 日志内容规范
- **结构化日志**：使用 JSON 格式，便于解析
- **上下文信息**：包含用户 ID、请求 ID、业务标识
- **敏感信息**：避免记录密码、身份证等敏感数据
- **性能信息**：记录关键操作的执行时间

### 9.3 日志输出配置
- **控制台输出**：开发环境使用，格式化显示
- **文件输出**：生产环境使用，按日期滚动
- **远程日志**：集中式日志收集，如 ELK Stack
- **日志压缩**：历史日志压缩存储

### 9.4 日志监控和分析
- **日志聚合**：统一收集和存储
- **实时监控**：关键错误实时告警
- **日志分析**：业务指标分析、异常趋势分析
- **日志检索**：快速定位问题日志

## 10. 应用监控模块

### 10.1 Spring Boot Actuator
- **端点配置**：暴露必要的监控端点
- **健康检查**：自定义健康指示器
- **指标收集**：JVM、应用、业务指标
- **信息端点**：应用版本、构建信息

### 10.2 自定义监控
- **业务指标**：使用 Micrometer 收集业务数据
- **性能监控**：方法执行时间、数据库查询性能
- **错误监控**：异常统计和分析
- **用户行为**：关键业务操作追踪

### 10.3 日志与监控集成
- **结构化日志**：便于监控系统解析
- **关键事件记录**：业务关键节点日志
- **性能日志**：慢操作和资源使用情况
- **告警配置**：基于日志和指标的告警

### 10.4 生产环境监控
- **应用状态**：启动、运行、关闭状态监控
- **资源使用**：内存、CPU、线程池状态
- **外部依赖**：数据库、缓存、第三方服务状态
- **业务监控**：核心业务指标实时监控

## 11. 代码质量模块

### 11.1 编码规范
- **命名规范**：类名、方法名、变量名清晰表达意图
- **代码结构**：合理的包结构和类层次
- **注释规范**：必要的类和方法注释
- **代码复用**：避免重复代码，提取公共方法

### 11.2 设计原则
- **SOLID 原则**：单一职责、开闭原则等
- **DRY 原则**：不重复自己
- **KISS 原则**：保持简单
- **YAGNI 原则**：你不会需要它

### 11.3 代码审查
- **Pull Request**：代码合并前必须审查
- **审查清单**：功能、性能、安全、可维护性
- **自动化检查**：静态代码分析工具
- **知识分享**：通过代码审查传播最佳实践

### 11.4 重构策略
- **持续重构**：小步快跑，持续改进
- **测试保护**：重构前确保测试覆盖
- **重构时机**：新功能开发时同步重构
- **技术债务**：定期评估和偿还技术债务