SuperAPI AI 工具集

springboot-patterns

编程与开发

查看项目

更新于 10-15 08:40

技能介绍

用途

Spring Boot Development Patterns 是一套 Spring Boot 架构与 API 模式参考,用于构建可扩展、生产级的后端服务。它围绕常见的分层架构与横切关注点,给出可直接参考的代码模式。

主要能力

资料覆盖以下主题:

  • REST API 结构:使用 @RestController、@RequestMapping、@Validated 组织接口,返回 ResponseEntity 与分页结果。
  • 分层结构:controller → service → repository 三层组织方式。
  • 数据访问:Spring Data JPA 的 Repository 模式,含 @Query 自定义查询与 Pageable 分页。
  • 服务层事务:使用 @Transactional 管理写操作。
  • DTO 与校验:使用 record 定义请求/响应对象,配合 @NotBlank、@Size、@NotNull、@FutureOrPresent、@NotEmpty 等校验注解。
  • 异常处理:通过 @ControllerAdvice 与 @ExceptionHandler 集中处理校验异常、访问拒绝与通用异常,返回统一 ApiError。
  • 缓存:@Cacheable 与 @CacheEvict,需在配置类上启用 @EnableCaching。
  • 异步处理:@Async 返回 CompletableFuture,需在配置类上启用 @EnableAsync。
  • 日志:基于 SLF4J 的结构化日志写法,含成功与失败日志。
  • 中间件/过滤器:继承 OncePerRequestFilter 实现请求日志记录。
  • 分页与排序:PageRequest 配合 Sort 使用。
  • 外部调用容错:带指数退避的重试封装方法。
  • 限流:基于 Bucket4j 的过滤器实现,按客户端 IP 限流。
  • 后台任务:使用 @Scheduled 或集成 Kafka、SQS、RabbitMQ 等队列,要求处理器幂等且可观测。
  • 可观测性:Logback JSON 结构化日志、Micrometer + Prometheus/OTel 指标、Micrometer Tracing 配合 OpenTelemetry 或 Brave 追踪。
  • 生产默认实践:优先构造器注入、启用 spring.mvc.problemdetails.enabled=true 以支持 RFC 7807 错误、配置 HikariCP 连接池与超时、查询使用 @Transactional(readOnly = true)、通过 @NonNull 与 Optional 强化空安全。

使用方式

资料以代码示例形式给出各模式的写法,包括控制器、Repository、Service、DTO、异常处理器、缓存服务、异步服务、日志服务、请求日志过滤器、分页排序、重试工具方法、限流过滤器等。使用时需注意:缓存需在配置类上添加 @EnableCaching,异步需添加 @EnableAsync。

限流部分包含安全说明:X-Forwarded-For 头默认不可信,因为客户端可伪造。仅当应用位于可信反向代理(如 nginx、AWS ALB)之后、已注册 ForwardedHeaderFilter 为 bean、已在配置中设置 server.forward-headers-strategy=NATIVE 或 FRAMEWORK、且代理配置为覆盖(而非追加)X-Forwarded-For 头时,才可使用转发头。正确配置 ForwardedHeaderFilter 后,request.getRemoteAddr() 会自动返回正确的客户端 IP;未配置时应直接使用 request.getRemoteAddr(),它返回的是直接连接 IP,是唯一可信的值。示例限流过滤器使用 request.getRemoteAddr() 识别客户端,并提示不要直接读取 X-Forwarded-For。

适用场景

资料列出的激活场景包括:

  • 使用 Spring MVC 或 WebFlux 构建 REST API
  • 组织 controller → service → repository 分层
  • 配置 Spring Data JPA、缓存或异步处理
  • 添加校验、异常处理或分页
  • 为 dev/staging/production 环境设置 profile
  • 使用 Spring Events 或 Kafka 实现事件驱动模式

限制

资料未提供安装命令、依赖版本、许可信息、收费方式或平台支持范围,这些内容暂未提供。代码示例中的业务实体(如 Market、Notification、Report)为演示用途,实际使用时需按项目情况调整。