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

SpringBoot 新特性

优质博文:IT-BLOG-CN

2.1.0新特性最低支持jdk8,支持tomcat9

对响应式编程的支持,spring-boot-starter-webflux starter POM可以快速开始使用Spring WebFlux,它由嵌入式Netty服务器支持

1.5.8
在这里插入图片描述
2.1.0/2.7.0/3.0.0
在这里插入图片描述
Configuration properties migration

当升级到新功能版本时,一些配置可能会重命名或者被移除。SpringBoot提供一种方式去分析你应用的环境和在启动时打印诊断内容,还可以在运行时为你临时迁移属性。要启用该特性,添加下方的依赖到你的工程中:

<dependency> 
	<groupId>org.springframework.boot</groupId> 
	<artifactId>spring-boot-properties-migrator</artifactId> 
	<scope>runtime</scope>
</dependency>

Gradle Plugin 增强,支持kotlin。

Spring Boot 2.0 开始支持 GIF banners. See this project for an example.
在这里插入图片描述
2.7.0新特性自动配置注册文件,文件位置发生变更,之前都是写在下面 文件中的:META-INF/spring.factories>现在改名了:META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

为了向后兼容,META-INF/spring.factories 虽然现在被标识废弃了,但现在仍然可以使用,后续可能被彻底删除,建议使用新的规范。
在这里插入图片描述
支持 GraphQL,集成了对 GraphQL 的自动配置、指标支持等,Starter 名为:spring-boot-starter-graphql

由于 OkHttp 3 不再维护,Spring Boot 2.7 已升级到 OkHTTP 4。OkHttp 4向后兼容OkHttp 3

新注解(@AutoConfiguration) 新增了一个自动配置注解 @AutoConfiguration,用来代替之前的 @Configuration,用于标识新自动配置注册文件中的顶级自动配置类,由 @AutoConfiguration 注解嵌套、导入进来的其他配置类可以继续使用 @Configuration 注解。

另外,为方便起见,@AutoConfiguration 注解还支持 after, afterNames, before 和 beforeNames 属性进行自动配置排序,用于代替之前的 @AutoConfigureAfter 和 @AutoConfigureBefore 注解。

这个注解可以说更加细分了吧,自动配置专用注解,用专门的注解来干专门的事,这样也可以用来区分用 @Configuration 标识的普通配置类。

2.6.0开始禁止循环引用: 如果您的应用程序由于 BeanCurrentlyInCreationException 而无法启动,强烈建议您更新配置以打破依赖循环。

如果您无法这样做,可以通过将 spring.main.allow-circular-references 设置为 true 或在 SpringApplication 和 SpringApplicationBuilder 上使用新的 setter 方法来再次允许循环引用

3.0.0新特性

spring6

Java 17是Spring Boot 3.0的最低版本要求,spring6 tomcat10也是springboot3的最低版本要求

Spring Boot 3.0的一个重要变化,即从Java EE迁移至javarta.包名由javax变成javarta。

oracle在19年把javax捐给eclipse基金会,但不允许使用javax的命名空间,所以eclipse才继续发展成现在的javaee标准Jakarta EE。

Spring Boot 3.0 应用程序现在可以直接转换为 GraalVM 原生镜像(无需本地安装GraalVM环境),这可以提供显著的内存和启动性能改进。

可参考文章:Spring Native

GraalVM与Spring Native初体验

native-image

mvn -Pnative spring-boot:build-image

docker run --rm -p 8080:8080 docker.io/library/myproject:0.0.1-SNAPSHOT

spring-native打包镜像启动速度
在这里插入图片描述
JVM启动速度
在这里插入图片描述

文件大小:spring-native打包镜像占95.55MB,JVM占28.9MB。

Auto-configuration Files

Spring Boot 2.7 引入了一个新的 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件,用于注册自动配置,同时保持与 spring.factories 中注册的向后兼容性。在此版本中,已删除对在 spring.factories 中注册自动配置的支持,以支持导入文件。

Spring官方在(Spring Boot3.0,Spring Framework6.0、Tomcat10.1.6-M16以上兼容支持JDK19) 实验虚拟线程
在这里插入图片描述
3.1新特性

1、最低环境要求
Spring Boot 3.0 的发布,其最低要求 Java 17,并向上兼容支持 Java 19,Spring Boot 3.1 可以支持 Java 20 了,因为前段时间 Java 20 发布了。

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

Spring Boot

JDK

Spring

Maven

Gradle

3.1.0

17 ~ 20

6.0.9+

3.6.3+

7.5+,8.x

3.0.0

17~19

6.0.2+

3.5+

7.5+

2.7.12

8~20

5.3.27+

3.5+

6.8.x,6.9.x,7.x,8.x

2、移除 HttpClient 4

因为 Spring 6 删除了 RestTemplate 对 Apache HttpClient 4 的支持,取而代之的则是 Apache HttpClient 5。

而 Spring Boot 3.0 又同时包含了 HttpClient 4 和 HttpClient 5 两个依赖的管理,如果同时管理这两个版本,有的人可能会继续使用 HttpClient 4,应用程序在使用 RestTemplate 时可能会有潜在的错误,导致诊断困难。

所以,Spring Boot 3.1 移除了 HttpClient 4 的依赖管理,转而逼迫用户强制使用 HttpClient 5,大家有依赖 HttpClient 4 的升级时需要注意了。

3、Servlet 和 Filter 注册失败时抛异常

大家知道,Spring Boot 注册 Servlet 和 Filter 时用的 ServletRegistrationBean 和 FilterRegistrationBean 这两个类,之前注册失败时是记录 warn 级别的日志,现在则是直接抛出 IllegalStateException 异常。

如果不想注册失败抛出异常,还是想像以前一样记录 warn 警告日志,可以调用这两个类的 setIgnoreRegistrationFailure(true) 方法.


http://www.kler.cn/a/463770.html

相关文章:

  • node内置模块之---path 模块
  • 基于51单片机和16X16LED点阵屏(74HC138和74HC595驱动)的小游戏《贪吃蛇》
  • [Qt] Qt介绍 | 搭建SDK
  • 25.1.3
  • ES IK分词器插件
  • Spring Boot 各种事务操作实战(自动回滚、手动回滚、部分回滚)
  • 使用Windows和FFmpeg 将https://xxx.com/xx.m3u8 推流到B站
  • 二十三种设计模式-建造者模式
  • 【2024年-12月-31日-开源社区openEuler实践记录】virtCCA_sdk:开启虚拟化安全增强的编程新钥
  • Maven 测试和单元测试介绍
  • 项目管理:用甘特图 “导航” 项目全程
  • tensorboard的界面参数与图像数据分析讲解
  • MYSQL 高阶语句
  • linux系统编程(七)管道和FIFO
  • 【MySQL】之Centos7.6 Yum方式安装部署安装Mysql 5.7版本
  • IPsec协议,网络安全的秘密
  • CentOS Stream 9 搭建单机版Clickhouse
  • Spring Boot 日志系统选择、日志系统选择、日志系统选择技术选型
  • 【GeekBand】C++设计模式笔记20_Composite_组合模式
  • 将广播发送和接收端实现一遍,完成一个发送端发送信息,对应多个接收端接收信息实验。
  • 怎么在 Linux 下运行 smart_rtmpd
  • 多模态论文笔记——CogVLM和CogVLM2(副)
  • [Linux]操作系统概念
  • Postman[4] 环境设置
  • ThinkPHP 8高效构建Web应用-第一个简单的MVC应用示例
  • Java Map 集合详解:基础用法、常见实现类与高频面试题解析