大家好,我是R哥。
就在前几天,Spring Boot 3.5.0 正式发布了:
最新的支持版本如下:
3.2.x 在前几天也停止维护了,很神奇的是,3.1.x 及以下的停更版本居然也发布 bug 更新包了。
从路线图可以看到每个版本的终止时间,每个版本的生命周期只有一年,3.3.x 以下的版本停止免费维护了,3.3.x 还有一个月也要停止维护了,商业支持的 3.x 最高版本版本 3.1.x、2.x 为 2.7.x。
Spring Boot 进入了全新的 3.4+ 时代了,2.6.x 以下的版本彻底退出历史舞台,4.0 都快要来了,技术变革太快了。。
Spring Boot 3.5.0 新特性
1、最低环境要求
Spring Boot 3.0.0 开始支持并最低要求 Java 17,目前的新版本也陆续开始支持 Java 21 ~ 24 了。
对 Java 开发环境的要求对比表:
Spring Boot | JDK | Spring | Maven | Gradle |
---|---|---|---|---|
3.5.0 | 17 ~ 24 | 6.2.7+ | 3.6.3+ | 7.6.4+,8.4+ |
3.4.0 | 16 ~ 23 | 6.2.0+ | 3.6.3+ | 7.6.4+,8.4+ |
3.3.0 | 17 ~ 22 | 6.1.8+ | 3.6.3+ | 7.5+,8.x |
3.2.0 | 17 ~ 21 | 6.1.1+ | 3.6.3+ | 7.5+,8.x |
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.18 | 8 ~ 21 | 5.3.31+ | 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%!!
R哥制作的《Java 新特性实战课》都可以报名学起来,好课不贵,199 元永久学习,如后续出了 Java 21 及更多版本新内容都能免费更新。
2、结构化日志记录改进
在《Spring Boot 3.4 版本》中出的新功能结构化日志,Spring Boot 3.5 又对它进行改进了:
- 支持自定义结构化日志堆栈跟踪,可以自定义写入结构化日志的堆栈跟踪,以限制其大小或以不同的格式进行打印。可以使用
logging.structured.json.stacktrace.*
属性配置堆栈跟踪输出。 - ECS 结构日志的 JSON 输出已更新为使用嵌套格式,这将提高与使用 JSON 的后端之间的兼容性。
- ECS 结构化日志格式,现在在
tags
字段中添加了 Logback 和 Log4j 的标记。
3、服务连接支持 SSL
Spring Boot 3.5 已经支持为选定的服务连接添加客户端 SSL 支持,以下服务连接支持此功能:
- Cassandra
- Couchbase
- Elasticsearch
- Kafka
- MongoDB
- RabbitMQ
- Redis
另外,Testcontainers 和 Docker Compose 集成也进行了更新,也允许进行 SSL 配置:
- 对于 Testcontainers,可以使用新的注解;
- 对于 Docker Compose,可以使用标签。
4、从环境变量加载属性
虽然之前的版本已经可以从环境变量加载单个属性,但现在,Spring Boot 3.5 开始,可以从单个环境变量加载多个属性。
比如,现在可以定义一个多行环境变量 USER_CONFIGURATION
,可以包含以下内容:
user.name=John
user.age=18
user.sex=1
...
然后可以通过使用 env:
前缀导入:
spring.config.import=env:USER_CONFIGURATION
在 Environment
中,就可以找到 user.name
、user.age
等其他多个属性了,也就是说,当有多个属性值的时候,可以不用配置多个环境变量了,一个环境变量搞定。
5、AsyncTaskExecutor 与自定义 Executor
AsyncTaskExecutor
是 Spring 框架提供的异步任务执行器接口,用于执行异步方法或任务。它是 Spring 对 Java 原生Executor
的增强,提供了更高层次的封装,常用于异步方法调用(如@Async
)或手动提交任务。
如果自定义的 Executor
的 Bean 存在,Spring Boot 3.5 现在可以自动配置 AsyncTaskExecutor,只需要将 spring.task. execute.mode
属性的值设置为 force。
在这种模式下运行时,它确保所有集成(包括常规的 @Async
处理)都使用自动配置的执行器,除非定义了 AsyncConfigurer
相关的 Bean。
6、Bean 后台初始化支持自动配置
Spring Boot 3.5 现在支持自动配置一个名为 bootstrapExecutor
的 Bean,在还没有的相关 Bean 情况下才自动配置,以支持 Bean 在后台完成初始化。
要实现这一点,需要在上下文中有一个名为 applicationTaskExecutor
的 Bean,当然也可以定义自定义 Executor
bean,这样就能让 Bean 后台初始化可以开箱即用。
7、通过注解注册过滤器和 Servlet
之前注册过滤器和 Servlet 普通使用的是 ServletRegistrationBean
和 FilterRegistrationBean
方式,Spring Boot 3.5 祭出了两个注解替代方案:
- 使用
@ServletRegistration
注册Servlet
; - 使用
@FilterRegistration
注册Filter
;
如下例所示:
@Configuration(proxyBeanMethods = false)
public class FilterConfiguration {
@Bean
@FilterRegistration(name = "encoding-filter", urlPatterns = "/*", order = 0)
public EncodingFilter encodingFilter() {
return new EncodingFilter();
}
}
此外,对 FilterRegistrationBean
的行为也进行了调整,以前,你可以将一个空的 DispatcherType
集传递给 setDispatcherTypes
方法,然后再将它传递给服务器。
现在,它的行为与调用 setDispatcherTypes(null)
作用相同,将其与 FilterRegistration
注解的功能保持一致。
8、自动配置的 TaskExecutor 名称
以前,Spring Boot 自动配置了一个 TaskExecutor
,其中包含 taskExecutor
和 applicationTaskExecutor
Bean 名称。
在 Spring Boot 3.5 这个版本中,只提供了 applicationTaskExecutor
bean 名称,请求按名称自动配置的 Executor
的代码应该适应使用 applicationTaskExecutor
。
如果你的系统依赖这种方式,还想和过去保持兼容,你也可以使用 BeanFactoryPostProcessor
来添加别名,如下面的例子所示:
@Configuration
public class MyConfiguration {
@Bean
static BeanFactoryPostProcessor taskExecutorAliasBeanFactoryPostProcessor() {
return (beanFactory) -> beanFactory.registerAlias("applicationTaskExecutor", "taskExecutor");
}
}
9、Redis 配置变更
当配置 spring.data.redis.url
时,使用的 Redis 数据库由 URL 决定。如果 URL 没有指定数据库,则使用默认值 0
。
当配置 spring.data.redis.url
时,现在忽略 spring.data.redis.database
属性,使其行为与主机、端口、用户名和密码属性保持一致。
另外,增加使用 spring.data.redis.lettuce.read-from
属性配置 ReadFrom
的支持。
10、Prometheus Pushgateway 配置变更
将指标推送到 Prometheus Pushgateway 现在需要 io.prometheus:prometheus-metrics-exporter-pushgateway
而不是 io.prometheus:simpleclient_pushgateway
了。
另外,新客户端的 Pushgateway 支持也可能需要更改配置,如果使用 management.prometheus.metrics.export.pushgateway.base-url
,需要替换为 management.prometheus.metrics.export.pushgateway.address
,并将值调整为 host:port
的形式。
为了支持新的 Pushgateway 客户端,添加了三个新属性:
management.prometheus.metrics.export.pushgateway.format
:将format
属性设置为text
以文本形式推送指标,而不是使用 protobuf。management.prometheus.metrics.export.pushgateway.scheme
:将scheme
属性设置为https
,支持在推送指标时使用 SSL。management.prometheus.metrics.export.pushgateway.token
:设置token
属性,而不是现有的username
和password
属性,以使用基于令牌的身份验证。
11、更多
1)执行器端点 heapdump
现在默认为 access=NONE
,其目的是帮助减少错误配置应用程序泄露敏感信息的可能性。
2)属性 .enabled
的支持的值已经收紧了,现在必须是 true
或 false
。
3)配置文件命名规则在此版本中得到了加强,配置文件现在只能包含 -
(破折号)、 _
(下划线)、字母和数字。此外,配置文件不允许以 -
或 _
开头或结尾。
4)TestRestTemplate
现在和常规的 RestTemplate
一样使用相同的重定向设置,HttpOption.ENABLE_REDIRECTS
选项也已弃用。
5)大量 Spring 库和第三方类库都得到了更新,还有一些废除项。
总结
Spring Boot 3.5 这个版本的变化还挺大的,增加了不少实用功能,很多功能也都得到了增强,做技术的真要时刻保持对新技术的渴望啊,不然都跟不上时代的步伐了。
Spring Boot 这波操作,既是顺应大环境对现代 Java 的需求,又在细节上做了许多微创新。
从环境支持的 Java 版本不断提升,到结构化日志、服务连接 SSL、注解式 Servlet 和 Filter 注册、Redis 配置调整、Pushgateway 的更新……每一项都体现出了官方对开发体验和生产效率的深度思考。
话说你们现在用的什么版本呢?
特别是对很多还停留在 Spring Boot 2.x 或 Java 8 的朋友来说,是时候认真考虑升级了,因为这些新功能不只是新,更意味着性能提升、安全增强、开发便捷、生态进化,而这正是我们做后端开发最核心关注的方向。
Spring Boot 最新最全的实战代码已上传 Github:
如果你还没用过 Spring Boot,这里推荐下我的《Spring Boot 核心技术课》,17 个模块,几乎涉及所有核心技术,包括底层实现原理及代码实战,知识点非常齐全,助你快速打通 Spring Boot 的各个环节。
有需要的直接扫码订阅:
等课程内容更新到 Spring Boot 4.x,本课程会涨价到 499 元,早订阅,早学习,早受益。
好了,今天的分享就到这里了,后续R哥也会继续关注并分享更多的 Spring Boot 资讯和干货,关注公众号Java技术栈第一时间推送。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。