java-spring-boot

java-spring-boot

构建生产级 Spring Boot 应用程序——REST API、安全、数据、Actuator

40Star
0Fork
更新于 2026/7/10
SKILL.md
只读
名称
java-spring-boot
描述

构建生产级 Spring Boot 应用程序——REST API、安全、数据、Actuator

版本
3.0.0

Java Spring Boot 技能

使用现代最佳实践构建生产就绪的 Spring Boot 应用程序。

概述

本技能涵盖 Spring Boot 开发,包括 REST API、安全配置、数据访问、Actuator 监控和云集成。遵循 Spring Boot 3.x 模式,强调生产就绪。

何时使用此技能

当你需要以下操作时使用:

  • 使用 Spring MVC/WebFlux 创建 REST API
  • 配置 Spring Security(OAuth2、JWT)
  • 使用 Spring Data 设置数据库访问
  • 使用 Actuator 启用监控
  • 集成 Spring Cloud

涵盖主题

Spring Boot 核心

  • 自动配置和启动器
  • 应用属性和配置文件
  • Bean 生命周期和配置
  • DevTools 和热重载

REST API 开发

  • @RestController 和 @RequestMapping
  • 请求/响应处理
  • 使用 Bean Validation 进行验证
  • 使用 @ControllerAdvice 进行异常处理

Spring Security

  • SecurityFilterChain 配置
  • OAuth2 和 JWT 认证
  • 方法安全(@PreAuthorize)
  • CORS 和 CSRF 配置

Spring Data JPA

  • Repository 模式
  • 查询方法和 @Query
  • 分页和排序
  • 审计和事务

Actuator 和监控

  • 健康检查和探针
  • 使用 Micrometer 的指标
  • 自定义端点
  • Prometheus 集成

快速参考

// REST 控制器
@RestController
@RequestMapping("/api/users")
@Validated
public class UserController {

    @GetMapping("/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {
        return userService.findById(id)
            .map(ResponseEntity::ok)
            .orElse(ResponseEntity.notFound().build());
    }

    @PostMapping
    public ResponseEntity<User> createUser(@Valid @RequestBody UserRequest request) {
        User user = userService.create(request);
        URI location = URI.create("/api/users/" + user.getId());
        return ResponseEntity.created(location).body(user);
    }
}

// 安全配置
@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        return http
            .csrf(csrf -> csrf.disable())
            .sessionManagement(s -> s.sessionCreationPolicy(STATELESS))
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/actuator/health/**").permitAll()
                .requestMatchers("/api/public/**").permitAll()
                .anyRequest().authenticated())
            .oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults()))
            .build();
    }
}

// 异常处理器
@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(EntityNotFoundException.class)
    public ProblemDetail handleNotFound(EntityNotFoundException ex) {
        return ProblemDetail.forStatusAndDetail(NOT_FOUND, ex.getMessage());
    }
}

配置模板

# application.yml
spring:
  application:
    name: ${APP_NAME:my-service}
  profiles:
    active: ${SPRING_PROFILES_ACTIVE:local}
  jpa:
    open-in-view: false
    properties:
      hibernate:
        jdbc.batch_size: 50

management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,prometheus
  endpoint:
    health:
      probes:
        enabled: true

server:
  error:
    include-stacktrace: never

常见模式

分层架构

Controller → Service → Repository → Database
     ↓           ↓          ↓
   DTOs      Entities    Entities

验证模式

public record CreateUserRequest(
    @NotBlank @Size(max = 100) String name,
    @Email @NotBlank String email,
    @NotNull @Min(18) Integer age
) {}

故障排除

常见问题

问题 原因 解决方案
Bean 未找到 缺少 @Component 添加注解或 @Bean
循环依赖 构造器注入 使用 @Lazy 或重构
401 未授权 安全配置 检查 permitAll 路径
启动缓慢 大量自动配置 排除未使用的启动器

调试属性

debug=true
logging.level.org.springframework.security=DEBUG
spring.jpa.show-sql=true

调试清单

□ 检查 /actuator/conditions
□ 验证活动配置文件
□ 审查安全过滤器链
□ 检查 Bean 定义
□ 测试健康端点

使用

Skill("java-spring-boot")

相关技能

  • java-testing - Spring 测试模式
  • java-jpa-hibernate - 数据访问