用途
本技能是一份面向生产环境的企业级 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 应用的开发场景,尤其是需要统一错误响应、虚拟线程并发、真实数据库集成测试与可观测性的项目。
限制
资料未提供该技能的安装命令、收费方式、价格、平台支持范围及具体效果数据,这些信息暂未提供。