🐞 Bug 修复 当 Bundle name 为空字符串时,KafkaProperties 无法构建 SSL properties #43563 当属性解析抛出 ConversionFailedException 时,诊断功能很差 #43559 SpringApplicationShutdownHandlers 不按确定顺序运行 #43536 无法找到 @SpringBootConfiguration 导致误导性错误信息 #43507 如果上下文中有多个 ResourceHandlerRegistrationCustomizer Bean,则只使用其中一个 #43497 混合使用专用(dedicated)服务和共享(shared)服务时无法使用 Docker Compose 支持 #43472 Kafka dependency management 不包括 kafka-server 模块 #43454 当 ‘/_ping’ 调用失败并且版本应该修复时,Docker API 版本被错误地报告 #43452 从 KafkaProperties 建立生产者/消费者属性的方法在没有 SSL Bundle 的情况下不便使用 #43448 -Djarmode=tools 中的故障不会持续返回非零退出值 #43436 HttpComponentsClientHttpRequestFactoryBuilder 代替了现有的 defaultRequestConfigCustomizer,而不是对其进行添加 #43429 即使 imagePlatform 为空,spring-boot-maven-plugin 也会设置它 #43424 OnBeanCondition fails to match on annotations when using Scoped Proxies #43423 使用作用域(Scope)代理时,OnBeanCondition 无法与注解匹配 #43382 H2ConsoleAutoConfiguration 会导致提前初始化数据源 Bean #43359 接受大于 2GB 的数字进度 #43356 基于 Servlet 的 UserDetailsServiceAutoConfiguration 在响应式应用程序中处于活动状态 #43334 在 spring.
HTTP/3 是 Hypertext Transfer Protocol(超文本传输协议,即 HTTP)的最新主要版本,其规范已于 2022 年 6 月定稿。该版本旨在提高性能、可靠性和安全性。与之前的版本不同,HTTP/3 使用 QUIC 而不是 TCP 作为传输层。QUIC 是一种基于 UDP 的多路复用安全传输协议,内置 TLS 1.3 加密,默认情况下 QUIC 是加密的。
要进一步了解 HTTP/3 的性能和优势,可以查看 《什么是 HTTP/3》。
有关浏览器采用情况的信息,请参阅《检查 HTTP/3 使用情况》,其中还提供了不同浏览器使用的 HTTP 版本的原始数据。
Reactor Netty 1.2(Reactor 2024.0 发布系列的一部分)添加了对 HTTP/3 的实验性支持。通过这个新版本的 Reactor Netty,你可以配置你的 Spring Boot 应用和 Spring Cloud Gateway 来支持 HTTP/3。
下面让我们看看如何配置 HTTP/3 支持。
配置 Reactor BOM Version Spring Boot 3.4 默认集成了 Reactor 2024.0 发布系列! 如果你运行的是旧版本的 Spring Boot,你可以将 Reactor BOM 升级到 2024.
从 Spring Boot 3.3 升级 RestClient 和 RestTemplate 已添加对自动配置 RestClient 和 RestTemplate 以使用 Reactor Netty 的 HttpClient 或 JDK 的 HttpClient 的支持。按优先顺序,现在支持的客户端如下:
Apache HTTP Components(HttpComponentsClientHttpRequestFactory) Jetty Client (JettyClientHttpRequestFactory) Reactor Netty HttpClient (ReactorClientHttpRequestFactory) JDK HttpClient (JdkClientHttpRequestFactory) Simple JDK HttpURLConnection (SimpleClientHttpRequestFactory) 需要注意的是,如果类路径上没有 HTTP Client 库,就可能会使用 JdkClientHttpRequestFactory,而之前使用的是 SimpleClientHttpRequestFactory。可以通过设置 spring.http.client.factory 来选择特定的客户端。支持的值包括 http-components、jetty、reactor、jdk 和 simple。
默认情况下,所有五个客户端都会自动跟随重定向。要禁用此行为,可将 spring.http.client.redirects 设置为 dont-follow 。
Apache HTTP Components 和 Envoy Apache HTTP Components(组件)更改了 HttpClient 中有关 HTTP/1.1 TLS 升级的默认设置。大多数代理服务器都能顺利处理升级,但 Envoy 或 Istio 可能会遇到问题。
Spring Boot v3.3.4 现已发布。
🐞 Bug 修复 当封装了 AbstractRoutingDataSource 时,management.health.db.ignore-routing-datasources=true 无效 #42322 OAuth2ClientProperties 验证错误信息中缺少详细信息 #42279 来自未使用的错误配置 SSL bundle 的 FileNotFoundException #42169 当 spring-web 不在 classpath 上时,ZipkinHttpClientSender 会出现 “Failed to introspect Class”(类自省失败)#42161 与容器 Bean 一起使用时,@RestartScope 可能会导致 “Recursive update(递归更新)”异常 #42107 JarLauncher 无法加载大型 jar 文件 #42079 PropertiesMigrationListener 错误地将具有 group 的属性报告为已废弃属性 #42071 在 MongoDB 中使用空字符串的 ‘replica-set-name’ 属性将导致 ClusterType=REPLICA_SET #42059 默认 Logback 配置使用过时的 “converterClass” 属性 #42006 📔 文档 关于 spring.jmx.enabled 不适用于第三方库的文件 #42285 更新指向 Log4j2 系统属性(system properties)的链接 #42263 参考指南中的 GraphQL 链接重定向到根目录,而不是特定部分 #42208 参考指南中 “被动接收信息部分(Receive a message reactively section)” 的语法错误 #42200 autotime 启用、percentiles 和 percentiles-historgram 属性被废弃的原因令人困惑。 #42193 在属性文件中用 RFC 9457 取代 RFC 7807 #42190 不支持将配置属性绑定到带有默认值的 Kotlin 值类的文档 #42176 更新文档以反映新的未找到 Handler 的异常行为 #42167 波兰语配置属性参考 #42165 移除指向 “将 Spring Boot JAR 应用转换为 WAR” 的链接,因为该指南已不再可用 #42111 修正 Metric 文档页面上的 StatsD 链接错字 #42109 改进无需构建包的 docker 文档 #42106 改进 “命令行自动补全”中的文档 #42103 测试部分缺少 Kotlin 代码示例 #42094 修复 Colima 的 Docker 配置中的错误命令 #42078 Gradle Plugin AOT 文档中有示例错误 #42046 🔨 依赖升级 升级依赖到 Groovy 4.
Spring Boot v3.3.3 发布了。
⭐ 新特性 在 JavaVersion 枚举中添加 TWENTY_THREE #41716 🐞 Bug 修复 继承 DefaultErrorAttributes 并覆写 getErrorAttributes() 会被调用两次 #41995 在使用 WebFlux 时,当 ResponseStatusException 的原因是 BindingResult 异常时,server.error.include-binding-errors=ALWAYS 不生效 #41987 将 BOOT-INF/lib 中的 jar 添加到 classpath 时,PropertiesLauncher 不遵循 classpath.idx #41970 /cloudfoundryapplication 下 SBOM 端点的 Web 扩展不可用 #41890 启动器(Launcher)的 ClassLoader 不再具有并行功能 #41873 spring-boot-testcontainers 会在 AOT 处理过程中导致不必要的容器初始化 #41859 当 Reactor 不在类路径上时,ReactiveElasticsearchRepositoriesAutoConfiguration 应关闭 #41678 当 classifier 设置为非默认值时,mvn spring-boot:build-image 失败 #41661 Spring Boot Maven 插件 AOT 无法使用 module-info.
Spring Boot v3.3.2 正式发布。
🐞 Bug 修复 没有在 Spring Integration 6.2 中引入的 defaultTimeout 设置的配置属性 #41521 在 OnClassCondition.resolveOutcomesThreaded 中进行自动配置时出现 NPE,因为 firstHalf 为 null #41504 Spring 授权服务器现在将 multipleIssuersAllowed 默认为 false,并且不容易重新启用 #41355 ServiceConnection 无法与 @DataLdapTest 一起使用 #41325 PropertiesMigrationListener 错误地将属性报告为过时属性 #41252 @NestedConfigurationProperty 对 Record 不起作用 #41251 TestcontainersLifecycleBeanPostProcessor 无法与 Scope Bean 正常工作 #41238 如果 spring.config.import 无法解析,错误信息可能具有误导性 #41236 Docker desktop 更新后,构建镜像失败,提示 “Illegal char <:> at index 5: npipe:////” #41234 使用 Jetty 时,Filter、Listener 和 Servlet 未使用同一线程上下文 classloader 初始化 #41225 在 Webflux 中使用 DirtiesContext、随机端口和多个上下文的情况下,可能会导致多个上下文的行为异常 #41221 在原生镜像中使用 spring-boot-starter-activemq 时,org.
Spring Framework v6.1.11 正式发布。
⭐ 新特性 在 SpEL 的 ReflectionHelper 中确保 MethodHandle 的 varargs 组件类型不为 null#33193 在响应过程中出现 Reactor-Netty PrematureCloseException 时,WebClient 异常消息令人困惑 #33127 当发现无效的 factoryBeanObjectType 属性时,在异常中包含 Bean 名称 #33117 在响应式缓存切面使用 Error Handler #33073 getTypeForFactoryMethod 应捕获 NoClassDefFoundError 异常#33075 🐞 Bug 修复 SpEL 无法使用数组调用 varargs MethodHandle 函数 #33191 SpEL 无法调用变量参数为零的 varargs MethodHandle 函数 #33190 嵌套的 Bean 实例 Supplier 调用不会保留先前的工厂方法 #33180 DefaultErrorResponseBuilder 未实现 headers(Consumer) #33156 修复对 Set 方法参数的违规适配 #33150 使用 kotlinx-serialization 时,Web Controller 调用无效正文导致结果为 500,而不是 400 #33138 "file:.
Spring Boot v3.3.1 发布了,这是 Spring Boot v3.3 的第一个 BUG 修复版本。
🐞 Bug 修复 添加 org.springframework.boot.jdbc.parameters 标签后,SQL Server JDBC URL 出现格式错误 #41169 git-commit-id Maven 插件升级后,无法强制转换 Git instant 属性 #41152 将 status code 排除在 DefaultErrorAttributes 之外会引发 NPE(控指针异常)#41141 使用 devtools 进行 Spring Boot 远程重启时,在使用 java -jar 运行时会导致 Tomcat 错误 “factory already defined” #41107 MongoHealthIndicator 在严格设置下不符合 Mongo 稳定(Stable) API #41104 Bitnami MongoDB 服务连接失败 #41097 构建镜像时需要 Builder 指定一个栈(Stack)#41091 如果未包含 java.sql 模块,DataSourceProperties 绑定失败 #41084 使用 include 时,AOT 导致 Logback 配置错误 #41081 配置了 Builder 和 Buildpack 时,镜像构建挂起 #41049 尝试使用 Spring Boot 配置的 SSL 时,使用 Tomcat 的 HttpNio2Protocol 会抛出 IllegalArgumentException #41010 当包含 Multi-Release: true 的依赖项且 META-INF/versions 中存在意外文件条目时,Uber jar 启动失败 #41006 使用 Jetty 时,可执行 war 文件中可能找不到 JSP 相关资源 #40996 无论配置的最大线程数是多少,tomcat.
从 Spring Boot 3.2 进行升级 Jersey Observability(可观察性) Micrometer 1.13 已放弃对 Jersey 的支持,转而使用 Jersey 的 jersey-micrometer 模块。如果你的应用使用 Jersey 指标,请在升级时添加对 org.glassfish.jersey.ext:jersey-micrometer 依赖。
为了支持 Jersey 的可观察下,MetricsApplicationEventListener 已被替换为 ObservationApplicationEventListener。如果你之前使用 JerseyTagsProvider 自定义标签(Tag),现在需要实现一个 JerseyObservationConvention bean 来完成此功能。
删除了 Dropwizard 指标的 Dependency Management Dropwizard Metrics 的 Dependency management 理已删除。Spring Boot 并不直接依赖于 Dropwizard Metrics,因此不需要特定的版本。如果你的应用直接依赖于 Dropwizard Metrics,请更新你的构建配置,以指定满足其需求的版本。
Prometheus Client 1.x Spring Boot 3.3 包含对 Prometheus 客户端 1.x 的支持。该版本的客户端包含一些破坏性更改,例如对导出指标名称的更改。在 Prometheus 维护者添加该支持之前,1.x 客户端不支持使用 Prometheus Push Gateway。
如果你想继续使用 0.x 版本的 Prometheus 客户端,请从依赖中移除 io.micrometer:micrometer-registry-prometheus,并添加 io.
Spring Security 6.3.0 正式发布!
6.3 版本带来了几个引人注目的特性,如下:
长期的 JDK 序列化向后兼容性 新的方法安全注解和功能 密码受损检查 支持 OAuth 2.0 令牌交换 该版本将包含在即将发布的 Spring Boot 3.3 GA 版本中。
⭐ 新特性 为 OAuth2AuthorizedClientId 添加 Getter #13648 为 JwtDecoders 添加超时默认值 #14890 文档:添加了将 GrantedAuthorityDefaults 声明为基础架构 Bean 的提示 #15065 改进全局身份认证(Global Authentication)的日志记录 #14711 文档小修正 #15043 需要对使用 Kotlin DSL 的导入进行微小的文档更新 #14969 OAuth2 客户端身份认证文档不完整 #14982 校对 CasAuthenticationFilter 文档 #14883 将 “Spring Boot 2.x” 替换为 “Spring Boot” #14919 简化禁用 “application/x-www-form-urlencoded” 编码 Client ID 和 Secret#14859 支持为依赖方注册元素指定标识符 #14487 更新 6.