今日在闲逛Spring Boot官方网站时,偶然发现继Spring Boot3.5.0版本GA之后,出现了4.0.0-SNAPSHOT版本。这意味着Spring Boot 4.0版本已经开始问世了。今天就一起来聊聊关于Spring Boot4的新版本变更。
牛马们直呼,Spring Boot3都还没学完,4就来了。
从Spring Boot 4.0-SNAPSHOT开始,至少需要Java 17支持,还需要 Spring Framework 7.0.0-SNAPSHOT 或更高版本。同时需要maven 3.6.3或更高的版本,Gradle 7.6.4或更高的版本。
我们通过Idea构建一个Spring Boot 4.0相关项目,已经可以选择4.0.0-SNAPSHOT的Spring Boot版本。我这里Idea版本是2024.3.4:
选择后,加载依赖可以发现Spring Framework版本已经是7.0-SNAPSHOT了:
Spring Boot 4.0将GraalVM原生编译从实验特性升级为正式生产级支持,通过AOT(Ahead-of-Time)编译实现冷启动时间与内存占用的数量级优化:
不过使用时,需要引入额外依赖项:
<dependency>
<groupId>org.springframework.experimental</groupId>
<artifactId>spring-native</artifactId>
<version>0.12.0</version>
</dependency>
过AOT编译将应用转化为原生镜像,实现冷启动时间降低90%,内存占用减少80%。
// 启用GraalVM原生编译配置
@NativeHint(
options = {"--enable-http", "--enable-https"},
resources = @Resource(patterns = ".*.properties")
)
public class NativeConfig implements NativeConfiguration {}
生产建议:结合spring-boot-maven-plugin的build-image目标生成Docker镜像。
于JDK 21的虚拟线程特性,Spring Boot 4.0重构线程池模型以支持百万级并发:
// 全局启用虚拟线程
spring:
threads:
virtual:
enabled: true
// 异步任务无需修改
@Async
public CompletableFuture<String> fetchData() {
return CompletableFuture.completedFuture("Data from virtual thread");
}
Spring Boot 4.0版本中RequestMapping引入了version进行版本控制,可以优雅管理多版本API。
@RestController
@RequestMapping("/api/user")
public class UserController {
@GetMapping(version = "1")
public UserV1 getUserV1() { /* 旧版逻辑 */ }
@GetMapping(version = "2")
public UserV2 getUserV2() { /* 新版逻辑 */ }
}
取代Feign的HttpExchange注解,代码量减少60%。
// 声明式HTTP接口
public interface UserService {
@GetExchange("/users/{id}")
User getUser(@PathVariable("id") Long id);
}
// 自动代理注入
@Bean
HttpServiceProxyFactory proxyFactory(RestClient.Builder builder) {
return HttpServiceProxyFactory.builderFor(RestClientAdapter.create(builder.build())).build();
}
已经放弃了对Jackson 2.x的支持,全面升级为3.x
使用JSpecify注解强化空指针防护。
import org.jspecify.annotations.*;
public class UserService {
public @NonNull User createUser(@Nullable String defaultName) {
return new User(defaultName != null ? defaultName : "Guest");
}
}
目前Spring Boot 4.0还处在开发阶段,并不稳定。真实项目中还是建议使用3.5.0-GA版本。Spring Boot作为现在Java程序员必学的一个经典框架之一,了解他们的演变过程可以帮助我们更好的学习这个框架。
想要了解更多的变更记录,可以查看:https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-7.0-Release-Notes
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。