Spring Boot 3 + Java 21
Spring Boot 3 需要 Java 17 以上版本。Java 21 引入了虚拟线程,只需极少的代码更改即可实现大规模并发。
实体 + 仓库
@Entity @Table(name = "users")
public class User {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true, nullable = false) private String email;
@Column(nullable = false) private String passwordHash;
@CreationTimestamp private LocalDateTime createdAt;
}
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByEmail(String email);
}
REST 控制器
@RestController @RequestMapping("/api/users")
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
@GetMapping
@PreAuthorize("hasRole('ADMIN')")
public Page<UserDto> list(@RequestParam(defaultValue = "0") int page) {
return userService.findAll(PageRequest.of(page, 20));
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public UserDto create(@Valid @RequestBody CreateUserRequest req) {
return userService.create(req);
}
}
Spring Security + JWT
@Configuration @EnableMethodSecurity
public class SecurityConfig {
@Bean public SecurityFilterChain chain(HttpSecurity http) throws Exception {
return http
.csrf(c -> c.disable())
.sessionManagement(s -> s.sessionCreationPolicy(STATELESS))
.authorizeHttpRequests(a -> a
.requestMatchers("/api/auth/**").permitAll()
.anyRequest().authenticated())
.addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class)
.build();
}
@Bean public PasswordEncoder encoder() { return new BCryptPasswordEncoder(12); }
}
虚拟线程(Java 21)
spring.threads.virtual.enabled=true
# 一行配置——以极低内存处理 10 万以上并发请求
-> 使用 JSON Viewer 格式化 API 响应。