正在加载,请稍候…

Spring Boot 3 + Java 21:使用虚拟线程构建微服务

使用 Spring Boot 3 构建微服务——REST API、Spring Data JPA、Spring Security JWT、Docker 以及 J

Spring Boot 3 + Java 21:使用虚拟线程构建微服务

Spring Boot 3 + Java 21

Spring Boot 3 需要 Java 17 以上版本。Java 21 引入了虚拟线程,只需极少的代码更改即可实现大规模并发。

Spring Boot 3 + 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);
}

Spring Boot 3 + Java 21:使用虚拟线程构建微服务示意图

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 Boot 3 + Java 21:使用虚拟线程构建微服务示意图

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 响应。