
spring-boot-engineer
热门自动生成 Spring Boot 3.x 配置、创建 REST 控制器、实现 Spring Security 6 认证鉴权流程、配置 Spring Data JPA 数据持久层仓库以及响应式 WebFlux 端点。适用于构建 Spring Boot 3.x 应用、微服务或响应式 Java 应用;涉及 Spring Data JPA、Spring Security 6、WebFlux、Spring Cloud 微服务集成、Java REST API 设计或微服务 Java 架构时调用。
1.1万Star
945Fork
更新于 2026/5/20
SKILL.md
只读
名称
spring-boot-engineer
描述
自动生成 Spring Boot 3.x 配置、创建 REST 控制器、实现 Spring Security 6 认证鉴权流程、配置 Spring Data JPA 数据持久层仓库以及响应式 WebFlux 端点。适用于构建 Spring Boot 3.x 应用、微服务或响应式 Java 应用;涉及 Spring Data JPA、Spring Security 6、WebFlux、Spring Cloud 微服务集成、Java REST API 设计或微服务 Java 架构时调用。
Spring Boot Engineer
核心工作流
- 需求分析 — 明确服务边界、API 接口、数据模型及安全需求
- 架构设计 — 规划微服务架构、数据访问、云原生集成与安全策略;编码前先确认设计方案
- 功能实现 — 基于构造器注入与分层架构编写服务逻辑(详见下文快速入门)
- 安全防护 — 集成 Spring Security、OAuth2、方法级安全与 CORS 配置;确保安全规则编译通过并通过测试。若编译或测试失败:检查错误日志,修复失效的规则或配置后重新运行
- 自动化测试 — 编写单元测试、集成测试与切片测试;运行
./mvnw test(或./gradlew test),确保所有测试通过后再继续。若测试失败:分析堆栈信息,定位失败的断言或组件,修复问题后重新运行完整测试集 - 服务部署 — 通过 Actuator 配置健康检查与可观测性;验证
/actuator/health返回UP。若健康状态为DOWN:检查响应中的components细节,修复故障组件(如数据库连接、消息中间件等)并重新验证
参考指南
根据具体场景加载详细指南:
| 主题 | 参考文档 | 加载时机 |
|---|---|---|
| Web 层 | references/web.md |
Controller、REST API、参数校验、全局异常处理 |
| 数据访问 | references/data.md |
Spring Data JPA、Repository、事务管理、Projection 投影 |
| 安全认证 | references/security.md |
Spring Security 6、OAuth2、JWT、方法级安全 |
| 云原生 | references/cloud.md |
Spring Cloud、Config 配置中心、服务注册与发现、Gateway 网关、高可用熔断 |
| 自动化测试 | references/testing.md |
@SpringBootTest、MockMvc、Testcontainers、测试切片 |
快速入门 — 最小可运行结构
标准的 Spring Boot 功能模块包含以下分层结构,可直接复制作为开发起点。
Entity 实体类
@Entity
@Table(name = "products")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank
private String name;
@DecimalMin("0.0")
private BigDecimal price;
// getters / setters or use @Data (Lombok)
}
Repository 存储库
public interface ProductRepository extends JpaRepository<Product, Long> {
List<Product> findByNameContainingIgnoreCase(String name);
}
Service 服务层(构造器注入)
@Service
public class ProductService {
private final ProductRepository repo;
public ProductService(ProductRepository repo) { // 构造器注入 — 无需 @Autowired
this.repo = repo;
}
@Transactional(readOnly = true)
public List<Product> search(String name) {
return repo.findByNameContainingIgnoreCase(name);
}
@Transactional
public Product create(ProductRequest request) {
var product = new Product();
product.setName(request.name());
product.setPrice(request.price());
return repo.save(product);
}
}
REST Controller 控制器
@RestController
@RequestMapping("/api/v1/products")
@Validated
public class ProductController {
private final ProductService service;
public ProductController(ProductService service) {
this.service = service;
}
@GetMapping
public List<Product> search(@RequestParam(defaultValue = "") String name) {
return service.search(name);
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public Product create(@Valid @RequestBody ProductRequest request) {
return service.create(request);
}
}
DTO(Record 数据传输对象)
public record ProductRequest(
@NotBlank String name,
@DecimalMin("0.0") BigDecimal price
) {}
全局异常处理器
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public Map<String, String> handleValidation(MethodArgumentNotValidException ex) {
return ex.getBindingResult().getFieldErrors().stream()
.collect(Collectors.toMap(FieldError::getField, FieldError::getDefaultMessage));
}
@ExceptionHandler(EntityNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public Map<String, String> handleNotFound(EntityNotFoundException ex) {
return Map.of("error", ex.getMessage());
}
}
测试切片
@WebMvcTest(ProductController.class)
class ProductControllerTest {
@Autowired MockMvc mockMvc;
@MockBean ProductService service;
@Test
void createProduct_validRequest_returns201() throws Exception {
var product = new Product(); product.setName("Widget"); product.setPrice(BigDecimal.TEN);
when(service.create(any())).thenReturn(product);
mockMvc.perform(post("/api/v1/products")
.contentType(MediaType.APPLICATION_JSON)
.content("""{"name":"Widget","price":10.0}"""))
.andExpect(status().isCreated())
.andExpect(jsonPath("$.name").value("Widget"));
}
}
规范与约束
必须遵循 (MUST DO)
| 规范 | 正确范式 |
|---|---|
| 构造器注入 | public MyService(Dep dep) { this.dep = dep; } |
| API 入参校验 | 在所有写操作/变更类端点上标注 @Valid @RequestBody MyRequest req |
| 类型安全配置 | 使用 @ConfigurationProperties(prefix = "app") 绑定到 Record 或配置类 |
| 严谨使用注解 | 业务逻辑用 @Service,数据持久层用 @Repository,HTTP 控制器用 @RestController |
| 显式事务作用域 | 多步写操作标注 @Transactional;只读查询标注 @Transactional(readOnly = true) |
| 隐藏内部细节 | 在 @RestControllerAdvice 中捕获领域异常;返回规范的错误明细(Problem Details),严禁暴露堆栈信息 |
| 外部化配置与密钥 | 统一使用环境变量或 Spring Cloud Config 管理密钥 — 绝不直接写入 application.properties |
严禁行为 (MUST NOT DO)
- 使用字段注入(在字段上直接标注
@Autowired) - 遗漏 API 端点的入参校验
- 在有明确语义注解(
@Service/@Repository/@Controller)时误用@Component - 混用阻塞与响应式代码(例如在 WebFlux 响应式链中调用
.block()) - 在
application.properties/application.yml中硬编码密钥或凭据 - 硬编码 URL、凭据或特定环境的配置值
- 使用已废弃的 Spring Boot 2.x 模式(如
WebSecurityConfigurerAdapter)



