Spring Boot 3 是 Spring 社区的一次重要更新,引入了许多新特性和改动,旨在提升开发效率、性能和安全性。本文将详细介绍 Spring Boot 3 的主要新功能和新特性,帮助开发者更好地理解和使用这一最新版本。
1. Java 17 支持
Java 17 是最低要求
Spring Boot 2 支持 Java 8、Java 11 和 Java 14,这使得开发者可以在旧版本的 Java 上运行 Spring Boot 应用。然而,随着 Java 17 的发布及其作为长期支持版本(LTS),Spring Boot 3 决定将 Java 17 作为最低支持版本,以利用其最新的语言特性和性能改进。
2. Spring Framework 6 支持
全面升级到 Spring Framework 6
Spring Boot 3 基于 Spring Framework 6(Spring Framework 通常简称为 Spring),这一版本全面支持 Java 17 和 Jakarta EE 9+(原Java EE)。Spring Framework 6 带来了许多改进,包括性能优化、新的编程模型以及更好的开发者体验。
3. Jakarta EE 9+
命名空间迁移
Spring Boot 3 迁移到了 Jakarta EE 9+,Spring Boot 2 使用的是 Java EE 8 和以下版本,这些版本的 API 使用的是 javax 命名空间。迁移到 Jakarta EE 9+ 意味着需要对代码进行修改,将所有 javax 包更改为 jakarta 包。例如:
- javax.servlet -> jakarta.servlet
- javax.persistence -> jakarta.persistence
4. AOT 编译支持
Spring Boot 3 引入了 Ahead-Of-Time (AOT) 编译支持,可以通过 GraalVM 将 Spring 应用程序编译成原生二进制文件,显著减少启动时间和内存占用。
Spring Boot 2 中没有原生支持 AOT 编译,虽然可以手动集成 GraalVM,但需要更多的配置和调整。Spring Boot 3 提供了开箱即用的 AOT 支持,使得原生编译更加简单。
<!-- 使用 Spring Native 插件和 GraalVM 进行 AOT 编译 -->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<version>0.9.7</version>
</plugin>
</plugins>
GraalVM 是一种基于 JVM 的增强型多语言运行时,它可以执行多种语言(如 JavaScript、Python、Ruby、R、LLVM-based languages 和 Java 等),并支持高性能的原生代码编译。
GraalVM 提供了一种新的 JIT 编译器,称为 Graal 编译器,替代了传统的 HotSpot 编译器,带来了更好的性能和优化能力。
Native Image:GraalVM 允许将 Java 应用程序编译为原生可执行文件(即所谓的 AOT,Ahead-of-Time Compilation),无需运行在 JVM 上。这种编译方式可以加快应用启动时间,并减少运行时内存占用,非常适合微服务和云原生应用场景。
5. Micrometer Tracing
Spring Boot 3 引入了对 Micrometer Tracing 的支持,通过 Micrometer 和 OpenTelemetry 实现分布式跟踪。这允许开发者在同一个框架内管理指标和跟踪信息,简化了可观测性的实现。
Spring Boot 2 中 Micrometer 主要用于指标收集和监控,而分布式跟踪需要通过 Spring Cloud Sleuth 等其他工具实现。Spring Boot 3 将这些功能整合在一起,提高了可观测性的统一性。
import io.micrometer.tracing.Tracer;
import org.springframework.stereotype.Service;
@Service
public class MyService {
private final Tracer tracer;
public MyService(Tracer tracer) {
this.tracer = tracer;
}
public void someMethod() {
var span = tracer.nextSpan().name("mySpan").start();
try (var scope = tracer.withSpan(span)) {
// 业务逻辑
} finally {
span.end();
}
}
}
6. 配置改动
Spring Boot 3 对一些配置属性进行了调整和改进。
7. 安全改进
更严格的默认配置
Spring Boot 3 加强了对应用程序安全性的支持,包括更强的密码编码器配置、更严格的默认安全设置以及对 OAuth 2.1 的支持。
在 Spring Boot 2 中,安全性配置相对简单,但默认设置不够严格。Spring Boot 3 通过更严格的默认配置和增强的安全性功能,提高了应用程序的安全性。
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/public").permitAll()
.anyRequest().authenticated();
return http.build();
}
}
8. Hibernate 6
JPA 的默认实现
Spring Boot 3 默认使用 Hibernate 6 作为 JPA 的实现,这带来了许多性能改进和新特性。但这也可能需要对现有代码进行一些调整,以适应 Hibernate 6 的变化。
9. WebSockets
性能和功能改进
Spring Boot 3 对 WebSockets 的支持进行了改进和扩展,提供了更好的性能和更丰富的功能,适用于实时通信和推送消息的应用场景。
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new MyWebSocketHandler(), "/websocket").setAllowedOrigins("*");
}
}
10. HTTP/3 和 gRPC 支持
新网络协议支持
Spring Boot 3 增加了对 HTTP/3 和 gRPC 的支持,使得基于 Spring Boot 的微服务能够利用这些新的网络协议来提升性能和可靠性。
11. Kubernetes 和云原生支持
更好的集成
Spring Boot 3 增强了对 Kubernetes 和云原生开发的支持,包括更好的配置管理、服务发现和分布式跟踪。
总结
Spring Boot 3 是一次重要的版本更新,带来了许多新功能和改进。通过升级到 Spring Boot 3,开发者可以利用最新的 Java 特性和框架改进,提高应用程序的性能、安全性和可维护性。