当前位置: 首页 > news >正文

Spring Boot 3.5 新特性全解析:开发者必知的 10 大升级

Spring Boot 3.5 新特性全解析:开发者必知的 10 大升级

Spring Boot 3.5 不仅是版本号的提升,更是对现代 Java 应用开发的一次重要进化。

作为一名长期使用 Spring 生态的架构师,我一直关注着 Spring Boot 的每一次版本迭代。Spring Boot 3.5 的发布,带来了许多令人兴奋的新特性和改进,今天就和大家一起深度解析这些变化。

一、Java 22 虚拟线程集成

1.1 自动配置支持

// Spring Boot 3.5 自动配置虚拟线程 // 1. 无需额外配置,自动检测 Java 22+ 并启用虚拟线程 // application.properties spring.threads.virtual.enabled=true // 2. 自定义虚拟线程执行器 @Configuration public class VirtualThreadConfig { @Bean public ExecutorService virtualThreadExecutor() { return Executors.newVirtualThreadPerTaskExecutor(); } } // 3. 在 @Async 中使用 @Async("virtualThreadExecutor") public CompletableFuture<String> processAsync(String input) { // 处理逻辑 return CompletableFuture.completedFuture(result); }

1.2 Web 服务器支持

// application.properties # 启用虚拟线程 (Tomcat/Jetty/Undertow 均支持) server.tomcat.threads.virtual.enabled=true # 配置虚拟线程名称前缀 server.tomcat.threads.virtual.name-prefix=spring-virtual-

二、GraalVM Native Image 增强

2.1 简化的构建配置

pom.xml 配置:

<plugin> <groupId>org.graalvm.buildtools</groupId> <artifactId>native-maven-plugin</artifactId> <version>0.10.2</version> <executions> <execution> <id>build-native</id> <goals> <goal>compile-no-fork</goal> </goals> <phase>package</phase> </execution> </executions> <configuration> <buildArgs> <arg>--no-fallback</arg> <arg>--enable-url-protocols=https</arg> </buildArgs> <mainClass>${start-class}</mainClass> </configuration> </plugin>

2.2 运行时优化

┌─────────────────────────────────────────────────────────────┐ │ Native Image 性能对比 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 指标 JVM 模式 Native 模式 │ │ ──────────────────────────────────────────────────────── │ │ 启动时间 2-3 秒 0.1-0.3 秒 │ │ 内存使用 256MB+ 64-128MB │ │ 峰值性能 100% 105-110% │ │ 包大小 50MB+ 20-40MB │ │ 冷启动 慢 极快 │ │ │ └─────────────────────────────────────────────────────────────┘

三、Observability 增强

3.1 Micrometer 1.12 集成

// 自动配置的观测性指标 @RestController public class OrderController { private final MeterRegistry meterRegistry; public OrderController(MeterRegistry meterRegistry) { this.meterRegistry = meterRegistry; } @PostMapping("/orders") public ResponseEntity<Order> createOrder(@RequestBody Order order) { // 记录订单创建指标 Counter.builder("orders.created") .tag("status", order.getStatus()) .tag("customer", order.getCustomerId()) .register(meterRegistry) .increment(); // 处理订单 return ResponseEntity.ok(order); } }

3.2 OpenTelemetry 自动配置

# application.yaml management: tracing: sampling: probability: 1.0 propagation: type: b3 otlp: metrics: export: enabled: true endpoint: http://localhost:4317 tracing: export: enabled: true endpoint: http://localhost:4317

四、数据访问增强

4.1 Spring Data JPA 3.3 新特性

// JPA 批量操作优化 @Repository public interface OrderRepository extends JpaRepository<Order, Long> { // 批量保存,自动优化为单条 SQL @Modifying @Query("UPDATE Order o SET o.status = :status WHERE o.id IN :ids") int updateStatusBatch(@Param("status") String status, @Param("ids") List<Long> ids); // 流式查询,适用于大数据集 @Query("SELECT o FROM Order o WHERE o.status = :status") Stream<Order> findByStatusStream(@Param("status") String status); }

4.2 R2DBC 3.0 支持

// R2DBC 响应式数据访问 @Repository public interface ProductRepository extends ReactiveCrudRepository<Product, Long> { Flux<Product> findByCategory(String category); Mono<Product> findBySku(String sku); } // 响应式服务 @Service public class ProductService { private final ProductRepository repository; public ProductService(ProductRepository repository) { this.repository = repository; } public Flux<Product> getProductsByCategory(String category) { return repository.findByCategory(category) .filter(product -> product.getStock() > 0) .map(this::enrichProduct); } }

五、安全增强

5.1 Spring Security 6.3 集成

// OAuth2 增强配置 @Configuration public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(authorize -> authorize .requestMatchers("/public/**").permitAll() .anyRequest().authenticated() ) .oauth2Login(oauth2 -> oauth2 .loginPage("/login") .defaultSuccessUrl("/dashboard") ) .oauth2ResourceServer(oauth2 -> oauth2 .jwt(jwt -> jwt .jwtAuthenticationConverter(customJwtConverter()) ) ); return http.build(); } @Bean public JwtAuthenticationConverter customJwtConverter() { JwtAuthenticationConverter converter = new JwtAuthenticationConverter(); converter.setJwtGrantedAuthoritiesConverter(new CustomJwtGrantedAuthoritiesConverter()); return converter; } }

5.2 密码加密增强

// BCrypt 增强配置 @Configuration public class PasswordEncoderConfig { @Bean public PasswordEncoder passwordEncoder() { // 增强的 BCrypt 编码器 return new BCryptPasswordEncoder(12); // 强度更高 } @Bean public UserDetailsService userDetailsService() { // 用户详情服务 return username -> { User user = userRepository.findByUsername(username) .orElseThrow(() -> new UsernameNotFoundException("User not found")); return org.springframework.security.core.userdetails.User .withUsername(user.getUsername()) .password(user.getPassword()) .roles(user.getRoles().toArray(new String[0])) .build(); }; } }

六、测试增强

6.1 @RestClientTest 改进

// 测试 REST 客户端 @RestClientTest(ProductClient.class) public class ProductClientTest { @Autowired private ProductClient productClient; @Autowired private MockRestServiceServer server; @Test public void testGetProduct() { // 模拟响应 server.expect(requestTo("https://api.example.com/products/1")) .andRespond(withSuccess( "{\"id\": 1, \"name\": \"Product 1\", \"price\": 99.99}", MediaType.APPLICATION_JSON )); // 测试客户端 Product product = productClient.getProduct(1L); assertThat(product.getId()).isEqualTo(1L); assertThat(product.getName()).isEqualTo("Product 1"); server.verify(); } }

6.2 @DataJpaTest 增强

// 测试 JPA 存储库 @DataJpaTest public class OrderRepositoryTest { @Autowired private OrderRepository orderRepository; @Autowired private TestEntityManager entityManager; @Test public void testFindByStatus() { // 准备测试数据 Order order1 = new Order(); order1.setStatus("PENDING"); entityManager.persist(order1); Order order2 = new Order(); order2.setStatus("COMPLETED"); entityManager.persist(order2); entityManager.flush(); // 测试查询 List<Order> pendingOrders = orderRepository.findByStatus("PENDING"); assertThat(pendingOrders).hasSize(1); assertThat(pendingOrders.get(0).getStatus()).isEqualTo("PENDING"); } }

七、配置管理增强

7.1 分层配置支持

# application.yaml spring: config: import: - optional:classpath:config/common.yaml - optional:file:./config/override.yaml - optional:https://config-server.com/apps/${spring.application.name}/${spring.profiles.active} # 环境变量优先级 # 1. 命令行参数 # 2. 环境变量 # 3. 本地配置文件 # 4. 远程配置中心 # 5. 默认值

7.2 配置验证

// 配置类验证 @ConfigurationProperties(prefix = "app") @Validated public class AppConfig { @NotNull @Size(min = 2, max = 50) private String name; @Min(1) @Max(100) private int maxConnections; @Pattern(regexp = "^https?://.*") private String apiUrl; // getters and setters } // 启用配置属性 @Configuration @EnableConfigurationProperties(AppConfig.class) public class AppConfigConfiguration { }

八、Web 增强

8.1 Spring MVC 改进

// 控制器增强 @RestController @RequestMapping("/api/products") public class ProductController { private final ProductService productService; public ProductController(ProductService productService) { this.productService = productService; } @GetMapping public ResponseEntity<List<Product>> getProducts( @RequestParam(required = false) String category, @PageableDefault(size = 20) Pageable pageable) { Page<Product> products = productService.getProducts(category, pageable); return ResponseEntity.ok() .header("X-Total-Count", String.valueOf(products.getTotalElements())) .body(products.getContent()); } @PostMapping public ResponseEntity<Product> createProduct(@Valid @RequestBody Product product) { Product created = productService.createProduct(product); return ResponseEntity.created(URI.create("/api/products/" + created.getId())) .body(created); } }

8.2 WebFlux 增强

// 响应式控制器 @RestController @RequestMapping("/api/orders") public class OrderController { private final OrderService orderService; public OrderController(OrderService orderService) { this.orderService = orderService; } @GetMapping public Flux<Order> getOrders( @RequestParam(required = false) String status) { return orderService.getOrders(status) .delayElements(Duration.ofMillis(100)); // 模拟异步处理 } @PostMapping public Mono<ResponseEntity<Order>> createOrder( @Valid @RequestBody Mono<Order> orderMono) { return orderService.createOrder(orderMono) .map(order -> ResponseEntity.created( URI.create("/api/orders/" + order.getId()) ).body(order)); } }

九、DevTools 改进

9.1 热重载增强

# application-dev.yaml spring: devtools: restart: enabled: true additional-paths: src/main/resources exclude: "static/**,public/**" livereload: enabled: true remote: enabled: true context-path: /devtools

9.2 全局设置

// .spring-boot-devtools.properties restart.include.mylib=/mylib-[\w-]+\.jar restart.exclude.companylibs=/company-[\w-]+\.jar restart.exclude.spring-boot=/spring-boot-[\w-]+\.jar

十、容器化支持

10.1 Docker 构建增强

Dockerfile 最佳实践:

# 多阶段构建 FROM eclipse-temurin:22-jdk-alpine AS builder WORKDIR /app COPY . . RUN ./mvnw package -DskipTests FROM eclipse-temurin:22-jre-alpine WORKDIR /app COPY --from=builder /app/target/*.jar app.jar # 启用虚拟线程 ENV JAVA_OPTS="--enable-preview" # 健康检查 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD wget -qO- http://localhost:8080/actuator/health || exit 1 EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]

10.2 Kubernetes 集成

application-k8s.yaml:

spring: cloud: kubernetes: config: enabled: true secrets: enabled: true reload: enabled: true mode: polling period: 15s management: endpoints: web: exposure: include: health,info,prometheus endpoint: health: show-details: always

十一、总结与迁移建议

11.1 升级步骤

┌─────────────────────────────────────────────────────────────┐ │ 升级步骤 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. 检查 Java 版本:确保使用 Java 21+ │ │ 2. 更新 pom.xml:将 Spring Boot 版本改为 3.5.0 │ │ 3. 检查依赖:更新相关 Spring 生态依赖 │ │ 4. 测试应用:运行完整测试套件 │ │ 5. 性能测试:验证新特性带来的性能提升 │ │ 6. 部署上线:采用灰度发布策略 │ │ │ └─────────────────────────────────────────────────────────────┘

11.2 最佳实践

  1. 逐步采用新特性:从非核心服务开始尝试虚拟线程和 Native Image
  2. 监控性能变化:使用 Micrometer 监控升级前后的性能差异
  3. 优化配置:根据实际需求调整新的配置项
  4. 持续集成:在 CI/CD 流程中加入新特性的测试

Spring Boot 3.5 的发布,为 Java 开发者带来了许多实用的新特性和改进。无论是虚拟线程的集成、GraalVM Native Image 的优化,还是观测性的增强,都体现了 Spring 团队对现代应用开发需求的深刻理解。

这其实可以更优雅一点。Spring Boot 3.5 让我们能够用更简洁的代码、更高效的性能、更可靠的架构来构建现代 Java 应用。

别叫我大神,叫我 Alex 就好。希望这篇文章能帮助你更好地理解和应用 Spring Boot 3.5 的新特性,让你的开发工作更加得心应手。

附:Spring Boot 3.5 新特性速查表

  • Java 22 虚拟线程集成
  • GraalVM Native Image 增强
  • Micrometer 1.12 集成
  • OpenTelemetry 自动配置
  • Spring Data JPA 3.3 新特性
  • R2DBC 3.0 支持
  • Spring Security 6.3 集成
  • 测试框架增强
  • 配置管理改进
  • Web 框架增强
  • DevTools 改进
  • 容器化支持

Spring Boot 3.5,值得你升级!

http://www.cnnetsun.cn/news/1606482.html

相关文章:

  • 计算机毕业设计springboot智慧课堂数据可视化平台 基于SpringBoot的智能化教学数据分析系统 Java驱动的数字化课堂管理与展示平台
  • 交通运输统计分析主题汇总(2026-03-29更新)
  • Leather Dress Collection基础操作:LoRA权重叠加(如Beltbra+MicroShorts)技巧
  • Java基础面试题汇总
  • ConvNeXt 改进 :ConvNeXt采用WTConv卷积(感受野的小波卷积),ECCV 2024,实现高效涨点,二次创新CNBlock结构 ,独家首发
  • 颠覆传统视频传输:NDI技术与DistroAV插件的高效部署指南
  • 一键部署DeepSeek-R1-8B推理模型:Ollama教程,小白也能5分钟上手
  • Feishin安全设置终极指南:保护你的音乐数据和隐私
  • 从零开始:最新Anaconda+Cuda+cuDNN+Pytorch深度学习环境一站式搭建指南
  • 3D打印机静音升级:用TB67S109AFNG实现超静音微步进驱动(附完整电路图)
  • AI编程工具在代码质量提升方面有哪些具体表现
  • Qwen3-0.6B-FP8惊艳效果:Qwen3-0.6B-FP8在低资源设备上实现类GPT-4交互
  • Ubuntu24.04下Isaacgym安装避坑指南:从虚拟环境到Python版本切换全流程
  • AI IDE 进化论:从代码补全到智能体协作,开发者工作台的范式迁移
  • 《人脸识别为什么在真实场景中经常失效?》——从“算法很强”到“系统失效”的真实原因解析
  • 如何让你的AMD/Intel显卡获得DLSS级画质增强?OptiScaler跨显卡平台配置指南
  • 基于西门子 S7 - 200 PLC 的恒压供水控制系统设计
  • 2026前端面试必杀技:大白话详解高频面试题
  • C# 竟态条件
  • Janus-Pro-7B处理长文本技术详解:突破上下文窗口限制
  • docker部署Antigravity-Manager
  • Qwen3-14B开源大模型教程:中文法律条文解释与类案推荐能力
  • 如何高效管理游戏DLSS版本:DLSS Swapper完整实战指南
  • qgrid测试与部署完全手册:确保生产环境稳定运行
  • 3分钟彻底解决Windows运行库缺失问题:VisualCppRedist AIO一站式解决方案
  • ANSYS模态分析后,如何用MATLAB把导出的HB格式刚度矩阵变回普通矩阵?(附完整命令流)
  • usearch的开源赞助计划:企业支持与合作机会
  • BilibiliDown无损音频捕获技术解析与实战指南
  • 5个步骤让你的Mac应用始终保持最新状态:Latest工具完全指南
  • 2026 AI 算力全栈拆解:不止 GPU,撑起现代 AI 的 6 大核心处理器全解析