Spring Boot 开发模式
用于可扩展、生产级服务的 Spring Boot 架构和 API 模式。
何时激活
- 使用 Spring MVC 或 WebFlux 构建 REST API
- 构建控制器 → 服务 → 仓库层结构
- 配置 Spring Data JPA、缓存或异步处理
- 添加验证、异常处理或分页
- 为开发/预发布/生产环境设置配置文件
- 使用 Spring Events 或 Kafka 实现事件驱动模式
REST API 结构
仓库模式 (Spring Data JPA)
带事务的服务层
DTO 和验证
异常处理
缓存
需要在配置类上使用 @EnableCaching。
异步处理
需要在配置类上使用 @EnableAsync。
日志记录 (SLF4J)
中间件 / 过滤器
分页和排序
容错的外部调用
速率限制 (过滤器 + Bucket4j)
安全须知:默认情况下 X-Forwarded-For 头是不可信的,因为客户端可以伪造它。
仅在以下情况下使用转发头:
- 您的应用程序位于可信的反向代理(nginx、AWS ALB 等)之后
- 您已将
ForwardedHeaderFilter注册为 bean - 您已在应用属性中配置了
server.forward-headers-strategy=NATIVE或FRAMEWORK - 您的代理配置为覆盖(而非追加)
X-Forwarded-For头
当 ForwardedHeaderFilter 被正确配置时,request.getRemoteAddr() 将自动从转发的头中返回正确的客户端 IP。
没有此配置时,请直接使用 request.getRemoteAddr()——它返回的是直接连接的 IP,这是唯一可信的值。
后台作业
使用 Spring 的 @Scheduled 或与队列(如 Kafka、SQS、RabbitMQ)集成。保持处理程序是幂等的和可观察的。
可观测性
- 通过 Logback 编码器进行结构化日志记录 (JSON)
- 指标:Micrometer + Prometheus/OTel
- 追踪:带有 OpenTelemetry 或 Brave 后端的 Micrometer Tracing
生产环境默认设置
- 优先使用构造函数注入,避免字段注入
- 启用
spring.mvc.problemdetails.enabled=true以获得 RFC 7807 错误 (Spring Boot 3+) - 根据工作负载配置 HikariCP 连接池大小,设置超时
- 对查询使用
@Transactional(readOnly = true) - 在适当的地方通过
@NonNull和Optional强制执行空值安全
记住:保持控制器精简、服务专注、仓库简单,并集中处理错误。为可维护性和可测试性进行优化。


