Spring Boot 3.4 正式发布,王炸级更新!

文摘   2024-11-27 14:51   陕西  

这几天,我的朋友圈被 Spring Boot 3.4 的发布刷屏了。作为 Java 圈的老朋友,Spring Boot 每次更新都像过年一样让人激动,尤其这次 3.4 带来的新特性,简直就是王炸级更新!💥话不多说,我们直接开扒,看看这次的 Spring Boot 又有哪些亮点。

3.x 时代的演进:挥别旧时代,拥抱未来

首先要提到的是 3.2.x 的“退休”。从图表可以看出,3.1.x 及以下版本现在基本只能靠“续命”了,而 Spring Boot 3.4 的到来,意味着我们彻底迈进了 3.3+ 的新时代。

新版本支持 Java 17 及以上,这很关键。为什么?因为 Java 17 是 LTS(长期支持)版本,而 Java 21、23 则是新宠。以前总有小伙伴吐槽:“我才刚习惯 Java 8,咋就要追 17?”现在,这个升级不是建议,是必须!不然,你可能连最新的 Spring Boot 都跑不起来。

作为开发者,我觉得这个改变挺好的,毕竟新版本 Java 在性能和语言特性上的提升是实打实的。比如 record 的支持、虚拟线程(Virtual Threads),这些都让开发更加高效,接下来你会发现这些技术点和 Spring Boot 3.4 是多么般配。

Spring Boot 3.4 的新特性:每一个都值得细品

1. 结构化日志:告别“日志堆”!

想想看,程序宕机时你满屏 INFODEBUG 的堆积日志,能找到线索就算你眼神好。3.4 引入了 JSON 格式的结构化日志,支持 ECS(Elastic Common Schema)、GELF(Graylog Extended Log Format)、Logstash 等。

用代码简单演示下:

@Configuration
public class LoggingConfig {
    @Bean
    public LogstashEncoder logstashEncoder() {
        LogstashEncoder encoder = new LogstashEncoder();
        encoder.setCustomFields("{\"app_name\":\"my-spring-boot-app\"}");
        return encoder;
    }
}

日志结构化后,你不仅能秒定位问题,还能直接接入分析工具,比如 ELK 或 Grafana Loki,效率提升不是一点点。


2. 虚拟线程:Spring 和 Loom 的完美结合

Java 19 引入的虚拟线程在 Spring Boot 3.4 中终于成为“官方一等公民”。你可以用虚拟线程去跑 Web 请求了,线程开销?不存在的!

@Bean
public Executor virtualThreadExecutor() {
    return Executors.newVirtualThreadPerTaskExecutor();
}

这么简单一句配置,就能让你的服务处理更多的并发请求。虚拟线程本质上是轻量级的线程,用它替代传统线程池,你会发现资源占用降了一个档次。


3. @Bean(defaultCandidate = false):更精细的 Bean 定义

以前我们定义 Bean 的时候,总会遇到一个问题:到底哪个 Bean 是主角?如果多个候选 Bean 存在时,Spring 总是迷惑。现在,@Bean(defaultCandidate = false) 解决了这个困扰,明确告诉 Spring 哪些 Bean 是“备胎”。

@Bean(defaultCandidate = false)
public MyService backupService() {
    return new MyBackupServiceImpl();
}

这样写的好处是,我们不用再担心 Spring 因为搞不清 Bean 优先级而报错。


4. MockMvcTester:测试党狂喜

如果你经常用 MockMvc 写测试,现在可以试试新的 MockMvcTester,它提供了一种更流式、更易用的 API。

mockMvcTester.perform(get("/api/test"))
             .andExpect(status().isOk())
             .andExpect(jsonPath("$.data").exists());

是不是感觉写测试变得丝滑了?我就问写过单元测试的兄弟们,爱不爱!


5. Actuator 增强:监控再也不怕了

Spring Boot 的 Actuator 现在支持更多“花式”扩展,比如可插拔的暴露器和 SSL 健康检查。

你可以通过简单配置实现 SSL 检查:

management:
  endpoint:
    health:
      ssl:
        enabled: true

这种细粒度的监控能力,让你的服务不仅跑得稳,还能时刻保持“健康”。


6. 优雅关机:服务停服也能从容不迫

以前关掉一个 Spring Boot 应用,动不动就直接 kill,各种连接断掉、任务失败。现在默认启用了 优雅关机,让你的服务可以有序关闭,比如等请求处理完、任务完成后再关掉。

server:
  shutdown: graceful

不夸张地说,这功能对微服务场景太友好了,尤其是分布式部署时,关掉一个服务再也不用战战兢兢了。

这次更新还有很多细节值得关注,比如去掉了 OkHttp 依赖、RestTemplate 支持 Netty 响应式 HttpClient、镜像构建改进等,每一项都在告诉我们,Spring Boot 不仅是个框架,更是开发体验的极致追求。

对于我来说,最让人兴奋的是 结构化日志虚拟线程,这些特性直戳痛点。以前日志一大堆,排查问题就像在大海捞针,现在终于可以利用 JSON 日志接入各种分析工具;虚拟线程则是让服务性能飞跃的一大步,让 Java 程序员在高并发场景下如虎添翼。

那么问题来了,这么多新特性,你最感兴趣的是哪个呢?来评论区聊聊吧

-END-


ok,今天先说到这,老规矩,给大家分享一份不错的副业资料,感兴趣的同学找我领取。

以上,就是今天的分享了,看完文章记得右下角给何老师点赞,也欢迎在评论区写下你的留言

程序员老鬼
10年+老程序员,专注于AI知识普及,已打造多门AI课程,本号主要分享国内AI工具、AI绘画提示词、Chat教程、AI换脸、Chat中文指令、Sora教程等,帮助读者解决AI工具使用疑难问题。
 最新文章