Spring Boot 3.3 正式发布,王炸级更新,应用启动速度直接起飞!

本文主要是介绍Spring Boot 3.3 正式发布,王炸级更新,应用启动速度直接起飞!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最新消息,Spring Boot 一次性发布了 3 个版本:

  • 3.3.0

  • 3.2.6

  • 3.1.13

Spring Boot 3.3 正式发布了,3.1.x 在前几天也停止维护了。

最新的支持版本如下:

图片

从路线图可以看到每个版本的终止时间,每个版本的生命周期只有一年。

Spring Boot 进入了全新的 3.x 时代了,3.1.x 和 3.0.x 也相继停止维护了,商业支持的版本也只有 2.7+ 了,2.6.x 以下的版本彻底退出历史舞台。。

Spring Boot 3.3.0 新特性

1、最低环境要求

Spring Boot 3.0.0 开始支持并最低要求 Java 17,Spring Boot 3.1.5 开始支持 Java 21 了。

对 Java 开发环境的要求对比表:

Spring BootJDKSpringMavenGradle
3.3.017 ~ 226.1.8+3.6.3+7.5+,8.x
3.2.017 ~ 216.1.1+3.6.3+7.5+,8.x
3.1.017 ~ 206.0.9+3.6.3+7.5+,8.x
3.0.017 ~ 196.0.2+3.5+7.5+
2.7.128 ~ 205.3.27+3.5+6.8.x, 6.9.x, 7.x, 8.x

支持 Java 8 的最后一个 Spring Boot 2.x 系列版本已经退伍啦,Java 17 的新时代到来。

如果你还停留在 Java 8 就 OUT 了,过去一两年,Java 8 采用率腰斩,Java 17 暴涨 430%!!

2、CDS 支持(可缩短启动时间)

什么是 CDS?

CDS 全称为:Class Data Sharing,即类数据共享,它是 JVM 的一项功能,它可以在多个 JVM 之间共享类,从而帮助减少 Java 应用程序的启动时间和内存占用。

CDS 可以生成一个称为共享类归档(Shared Class Archive)的文件,即 *.jsa 文件,该文件包含预处理的类元数据,它会在 JVM 启动时加载到内存,以便 JVM 可以快速访问这些类元数据,而不需要在启动时重新加载和解析这些类信息,从而大大减少了启动时间。

使用方式如下:

$ java -Djarmode=tools -jar test-app.jar extract --destination application
$ cd application
$ java -XX:ArchiveClassesAtExit=application.jsa -Dspring.context.exit=onRefresh -jar test-app.jar

这里它便会创建一个 application.jsa 文件,只要应用程序未更新,就可以重复使用该文件。如果要使用缓存,需要在启动应用程序时添加一个额外的参数:

$ java -XX:SharedArchiveFile=application.jsa -jar test-app.jar

有了这个特性支持,Spring Boot 应用程序的启动速度会大大提升,要直接起飞了。

3、Websockets 支持虚拟线程

Spring Boot 3.3.0 添加了 Websockets 对虚拟线程支持。

什么是虚拟线程?

虚拟线程是一种成本低廉、轻量级的用户模式的线程实现,也就是传说中的 “协程”,它可以充分利用可用硬件,大幅减少编写、维护和监测高并发应用的工作量。

我们都知道使用线程是要十分注意的,因为线程的创建、销毁都十分消耗系统资源,所以有了线程池,但这还不够,因为线程的数量是有限的,线程会阻塞操作系统线程,无法尽可能的提高吞吐量。

因为使用线程的成本很高,所以才会有了虚拟线程,它是用户态线程,成本是相当低廉的,调度也完全由用户进行控制(JDK 中的调度器),它同样可以进行阻塞,但不用阻塞操作系统线程,充分提高了硬件利用率,高并发也上了一个量级,从而实现了高吞吐量。

Java 19 初次引入虚拟线程,在 Java 21 中正式转正生产可用。

Spring Boot 3.1.5 做了对 Java 21 的兼容,Spring Boot 3.2.0 正式可以支持 Java 21 中的虚拟线程了,只需要添加以下配置即可:

spring.threads.virtual.enabled = true

4、配置文件支持 Base64

配置文件增强了,现在可以在 property 和 YAML 配置文件文件中将资源加载为 Base64 格式的值了,即使用 base64: 前缀将资源加载为 Base64 编码的文本值,这对于 SSL 证书等资源非常有用。

如下面配置示例:

spring:ssl:bundle:pem:mybundle:keystore:certificate: "base64:Ts9tL8UYRUdJTi..."private-key: "base64:Yk1dIEF0dHJpYn..."

5、支持 SBOMs

支持 SBOMs,并添加了一个 SBOM 端点。

SBOM 全称为:Software Bill of Materials,即软件材料清单,它用于提供软件组件的清单和详细信息,包括其涉及到的开源和第三方依赖、库、工具等。

SBOM 的主要目的是提高软件的透明度,帮助开发人员、安全团队理解软件中包含的具体内容,从而更好地管理安全风险、许可证合规性和依赖项的更新。

6、其他

1)可观察性增强了,主要添加了对 Micrometer 的 @SpanTag 注解的支持,新增了一个 InfoContributor 以及对 Prometheus 1.x 支持。

2)Spring Security 增强了,主要添加了对 JwtAuthenticationConverter 的自动配置。

3)服务连接支持增强了,主要添加了对Apache ActiveMQ Artemis 和 LDAP 的服务连接支持。

4)容器镜像增强了,主要添加了对 Docker Compose 对 Bitnami 容器镜像的支持。

5)大量 Spring 库和第三方类库都得到了更新,还有一些废除项。

总结

Spring Boot 3.3 这个版本的变化还挺大的,很多功能都得到了增强,做技术的真要时刻保持对新技术的渴望啊,不然都跟不上时代的步伐了。

这篇关于Spring Boot 3.3 正式发布,王炸级更新,应用启动速度直接起飞!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1001781

相关文章

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

Spring核心思想之浅谈IoC容器与依赖倒置(DI)

《Spring核心思想之浅谈IoC容器与依赖倒置(DI)》文章介绍了Spring的IoC和DI机制,以及MyBatis的动态代理,通过注解和反射,Spring能够自动管理对象的创建和依赖注入,而MyB... 目录一、控制反转 IoC二、依赖倒置 DI1. 详细概念2. Spring 中 DI 的实现原理三、

SpringBoot 整合 Grizzly的过程

《SpringBoot整合Grizzly的过程》Grizzly是一个高性能的、异步的、非阻塞的HTTP服务器框架,它可以与SpringBoot一起提供比传统的Tomcat或Jet... 目录为什么选择 Grizzly?Spring Boot + Grizzly 整合的优势添加依赖自定义 Grizzly 作为

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j