大家好,我是R哥。
最新消息,Spring Boot 一次性发布了 6 个版本:
- 3.4.0
- 3.3.6
- 3.2.12
- 3.1.14
- 3.0.18
- 2.7.23
Spring Boot 3.4 正式发布了,3.2.x 在前几天也停止维护了,很神奇的是,3.1.x 及以下的停更版本居然也发布 bug 更新包了。
最新的支持版本如下:
从路线图可以看到每个版本的终止时间,每个版本的生命周期只有一年。
Spring Boot 进入了全新的 3.3+ 时代了,3.2.x 及之前的版本也都停止维护了,商业支持的版本也只有 2.7+ 了,2.6.x 以下的版本彻底退出历史舞台,技术变革太快了。。
Spring Boot 3.4.0 新特性
1、最低环境要求
Spring Boot 3.0.0 开始支持并最低要求 Java 17,目前的新版本也陆续开始支持 Java 21 ~ 23 了。
对 Java 开发环境的要求对比表:
Spring Boot | JDK | Spring | Maven | Gradle |
---|---|---|---|---|
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.12 | 8 ~ 20 | 5.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%!!
R哥制作的《Java 新特性实战课》都可以报名学起来,好课不贵,199 元永久学习,如后续出了 Java 21 及更多版本新内容都能免费更新。
2、结构化日志
什么是结构化日志?
一般的日志都是 “非结构” 化的,也就是一段没有任何 “结构” 的日志文本字符串,比如我们在系统中常见的日志信息:
2024-11-25 10:41:05:347 INFO ...
虽然包含了所有关键的信息,但是想要提取其中的特定信息就非常困难,需要解析和搜索这段字符串。
而结构化日志则是一段有明确定义的结构的字符串,可读性好,通用是 JSON 格式,如以下日志:
{
"timestamp": "2024-11-25 10:41:05:347",
"level": "INFO",
...
}
这样获取日志信息是不是方便多了?
Spring Boot 中的结构化日志
Spring Boot 3.4 支持结构化日志记录,并支持以下开箱即用的 JSON 格式:
- Elastic Common Schema (ecs)
- Graylog Extended Log Format (gelf)
- Logstash(logstash)
启用结构化日志记录配置:
参数 | 说明 |
---|---|
logging.structured.format.console | 用于控制台输出 |
logging.structured.format.file | 用于文件输出 |
配置示例:
logging:
structured:
format:
console: ecs
file: ecs
结构化日志配置支持上面所说的 ecs、gelf、logstash 日志。
推荐看看我写的更多 Spring Boot 教程:https://www.javastack.cn/spring/spring-boot/
3、定义附加的 Bean
Spring Boot 3.4 开始,当类型匹配时,基于 Bean 的条件现在将忽略任何不是默认候选者的 Bean。
通过声明 bean 不是默认候选者,如:
@Bean(defaultCandidate = false)
public class Xxx {
}
然后在定义自动配置类型的 bean 时,如果存在相同类型的 bean,它就会被忽略,从而不会导致自动配置的 bean 注册失败。
比如在同一个应用程序中要使用两个数据源 Bean,或者其他两个相同类型的 Bean 时,这样就特别有用,还能简化配置。
Spring Boot 最新最全的实战代码已上传 Github:
4、扩展虚拟线程
Spring Boot 3.4 开始,如果启用了虚拟线程,以下组件将使用虚拟线程:
- OtlpMeterRegistry
- Undertow web server
另外,通过 Spring Integration 集成的任务调度器(TaskScheduler)现在也是虚拟线程感知的,即使在 @EnableScheduling
在没有开启的状态下。
5、Docker Compose 和 Testcontainers 改进
Docker Compose 现在支持多个 Docker Compose 配置文件,并且添加了几个新的命令行参数:
-
spring.docker.compose.start.arguments
和spring.docker.compose.stop.arguments
参数可用于指定在启动和停止服务时传递给 Docker Compose 子命令的其他命令行参数。 -
spring.docker.compose.arguments
参数支持传递参数给 Docker Compose。
另外,Testcontainers 测试容器也得到了各种改进,比如添加了对 org.testcontainers.kafka.KafkaContainer
、Redis Stack 和 Redis Stack Server 的支持。
6、Actuator 增强
可插拔的 Actuator 暴露器
Spring Boot 3.4 支持扩展 Spring Boot 以可插拔的方式公开 Actuator 端点,并且添加了一个 EndpointExposureOutcomeContributor
接口,它会影响到 @ConditionalOnAvailableEndpoint
注解的条件控制。
此扩展可以更轻松地提供类似于我们现有的 Cloud Foundry 支持的其他平台集成。
SSL信息和健康检查
如果你使用了 SSL bundles,现在在 /actuator/info
下添加了一个新端点,用来显示 SSL 信息,比如证书有效期、颁发者、主题等。
这个端点还能显示即将过期的证书,这样就能提醒我们不定期更新证书,它还提供了一个提醒阈值配置参数:
management.health.ssl.certificate-validity-warning-threshold
另外,它还添加了监控 SSL 证书的健康检查,如果证书无效,则会将状态设置为中止服务(OUT_OF_SERVICE)。
计划任务端点显示更多信息
计划任务 /actuator/scheduledtask
端点现在添加了更多关于计划任务的元数据信息,比如:下一次计划执行时间、上次执行时间、状态和异常等。
7、镜像构建改进
Spring Boot 现在默认使用的是 paketobuildpacks/builder-jammy-java-tiny
,该构建器支持 ARM 和 x64 平台开箱即用。
在 Maven 和 Gradle 插件中添加了一个用于构建 OCI 映像的 trustBuilder
选项,它控制了 CNB 生命周期的调用方式,从而在使用来自不受信任来源的构建器时提供更高的安全性。
默认情况下,来自 Paketo、Heroku 和 Google 的构建器是受信任的。
在 Maven 和 Gradle 插件中还添加了一个用于构建 OCI 映像的 imagePlatform
选项,此选项可用于指定为运行 CNB 构建包而拉取的任何 CNB 构建器、运行和构建包映像的操作系统和体系结构。
8、MockMvcTester 自动配置
支持当 AssertJ
在类路径下时自动配置 MockMvcTester,有了 MockMvcTester,我们就能使用流式 API 定义请求和断言。
MockMvcTester 也是 MockMvc 的替代方案,它可以代替 MockMvc 所能使用到的任何场景。
9、RestClient 和 RestTemplate
RestClient 和 RestTemplate 的自动配置,添加了对 Netty 响应式的 HttpClient
HTTP 客户端和 JDK 的 HttpClient
HTTP 客户端的支持。
按照优先顺序分别是:
- Apache HTTP Components (
HttpComponentsClientHttpRequestFactory
) - Jetty Client (
JettyClientHttpRequestFactory
) - Reactor Netty
HttpClient
(ReactorClientHttpRequestFactory
) - JDK
HttpClient
(JdkClientHttpRequestFactory
) - Simple JDK
HttpURLConnection
(SimpleClientHttpRequestFactory
)
需要注意的是,如果在类路径上没有HTTP客户端库,这可能会导致使用 JdkClientHttpRequestFactory,而以前使用的是 SimpleClientHttpRequestFactory。
可以通过设置 spring.http.client.factory
参数来选择特定的 HTTP 客户端,支持的值有:http-components、jetty、reactor、jdk 和 simple。
10、优雅关机
Spring Boot 3.4 开始,现在默认启用嵌入式 Web 服务器的优雅关机,包括:Jetty、Rector Netty、Tomcat 和 Undertow。
如果需要恢复之前的默认行为,可以设置以下参数:
server.shutdown: immediate
11、更多
1)Spring Boot 不再依赖 OkHttp,OkHttp 的依赖也被移除了。
2)Apache HTTP 组件已更改 HttpClient
中与 HTTP/1.1 TLS 升级相关的默认值。
3)配置属性的 Bean 验证有变动,如果要验证级联到嵌套属性,则根据需要添加 @Valid
注解。
4)当在 @Bean
方法上使用 @ConditionalOnBean
和 @ConditionalOnMissingBean
并设置 annotation
属性时, @ConditionalOnBean
和 @ConditionalOnMissingBean
的行为已更改。
5)大量 Spring 库和第三方类库都得到了更新,还有一些废除项。
总结
Spring Boot 3.4 这个版本的变化还挺大的,增加了不少实用功能,很多功能也都得到了增强,做技术的真要时刻保持对新技术的渴望啊,不然都跟不上时代的步伐了。
话说你们现在用的什么版本呢?
Spring Boot 最新最全的实战代码已上传 Github:
如果你还没用过 Spring Boot,这里推荐下我的《Spring Boot 核心技术课》,16 个模块,几乎涉及所有核心技术,包括底层实现原理及代码实战,知识点非常齐全,助你快速打通 Spring Boot 的各个环节。
有需要的直接扫码订阅:
等更新到 Spring Boot 3.5+,本课程会涨价到 499 元,早订阅,早学习,早受益。
好了,今天的分享就到这里了,后续R哥也会继续关注并分享更多的 Spring Boot 资讯和干货,关注公众号Java技术栈第一时间推送。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。