SuperAPI AI 工具集

java-spring-best-practices

编程与开发

查看项目

更新于 10-27 16:28

技能介绍

用途

本技能是一份面向生产环境的企业级 Spring Boot 开发指南,用于在构建 Spring Boot API、微服务或企业级 Java 应用时提供规范与示例。内容基于 Spring Boot 3.5.x / 4.0.x,要求 Java 17+(虚拟线程等特性需 21+)。

主要能力

v2.0 版本覆盖以下要点:

  • 使用 Java Records 作为 DTO(默认不可变)
  • 虚拟线程处理高并发 I/O(spring.threads.virtual.enabled=true)
  • 使用 ProblemDetail(RFC 7807)标准化错误响应
  • 用 RestClient 替代 RestTemplate(流式、同步)
  • Spring Boot 3.4+ 内置结构化日志
  • 以 Testcontainers 作为主要集成测试策略(替代 H2)
  • 使用 Micrometer Observation API 实现可观测性
  • 开发环境的 Docker Compose 集成
  • 使用密封类(sealed classes)构建异常层次
  • 对 GraalVM Native Image / CDS 的关注

使用方式

指南提供快速上手清单,包括:Java 17+(虚拟线程需 21+)、使用 spring-boot-starter-parent 管理依赖、使用 @RequiredArgsConstructor 进行构造器注入、DTO 使用 Java Records、控制器只负责路由而服务层承载业务逻辑、使用 ProblemDetail 与 @RestControllerAdvice、在 record 组件上使用 @Valid 与 Bean Validation、使用 SLF4J {} 占位符与结构化日志、使用 YAML 多环境配置(dev/prod/test)、单元测试(Mockito)与集成测试(Testcontainers)、开启 spring.threads.virtual.enabled=true。

架构上采用分层结构:controller(仅 HTTP 路由,保持轻薄)→ service(业务逻辑、缓存、校验)→ repository(Spring Data JPA)→ entity(JPA 领域模型),每层只依赖其下层,控制器不直接访问 repository。

依赖注入仅使用构造器注入,配合 @RequiredArgsConstructor。DTO 使用 Records 替代可变的 @Data Lombok 类,请求记录可携带校验注解,响应记录包含字段定义。映射通过 @Component 映射器完成实体与 DTO 的转换。控制器示例展示了创建、按 ID 查询和分页列表接口。

异常处理方面,通过配置开启 RFC 7807,使用密封抽象异常类 ApplicationException 派生 ResourceNotFoundException、DuplicateResourceException、BusinessRuleException、ExternalServiceException,并在 @RestControllerAdvice 中统一转换为 ProblemDetail 响应。

虚拟线程通过一个属性即可让阻塞式 I/O(JDBC、REST 调用)具备可扩展性,无需响应式编程;Tomcat、@Async、@Scheduled 会自动使用虚拟线程;I/O 期间应避免 synchronized 块(会导致 pinning),改用 ReentrantLock。

RestClient 用于替代 RestTemplate,支持流式调用、按状态码处理错误;声明式接口可使用 @HttpExchange。日志使用 @Slf4j 与占位符,结构化日志可配置 ecs、gelf、logstash 等格式。配置示例涵盖虚拟线程、数据源与 Hikari 连接池、JPA(ddl-auto: validate、open-in-view: false)、ProblemDetail、Caffeine 缓存,以及基于 Record 的 @ConfigurationProperties。

测试部分给出 Mockito + AssertJ 的单元测试示例,以及使用 @SpringBootTest、@AutoConfigureMockMvc、@Testcontainers 与 @ServiceConnection 的集成测试示例。现代 Java 惯用法包括 .toList()、密封类型上的模式匹配 switch、用于 JPQL 的文本块。

适用场景

适用于构建 Spring Boot API、微服务和企业级 Java 应用的开发场景,尤其是需要统一错误响应、虚拟线程并发、真实数据库集成测试与可观测性的项目。

限制

资料未提供该技能的安装命令、收费方式、价格、平台支持范围及具体效果数据,这些信息暂未提供。