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.
🐞 Bug 修复 BindValidationFailureAnalyzer 使用了错误的 target #40364 Log4j2LoggingSystem 通过一个永远不会被移除的 SpringEnvironmentPropertySource 污染 Log4j2 的环境 #40326 使用 Maven 时,配置 spring-boot.excludes 或 spring-boot-includes 用户属性会导致构建失败,提示:Cannot find default setter #40323 @ServletComponentScan 无法在模拟的 Web 环境中注册 Servlet 组件 #40321 在将 Log4j2 配置为使用单个 JVM 范围日志记录器上下文的情况下部署到 Tomcat 时,加载自定义的 deny-all 过滤器可能会导致 StackOverflowError 错误 #40312 Jetty 支持不设置虚拟线程名称 #40152 3.2.0 之后,当 Hibernate Scanner 未禁用时,可执行 JAR 应用的启动速度变慢 #40125 线程中断时,LaunchedClassLoader 可能会抛出 NoClassDefFoundError 错误 #40096 📔 文档 Producible 的 javadoc 中 @WriteOperation 和 @DeleteOperation 的链接文本有误 #40386 明确参数和构造函数绑定的要求 #40157 🔨 依赖升级 升级到 ActiveMQ 5.
Java 22 是一个重大改进,我认为对于每个人来说都值得升级。其中包含了一些重要的最终发布功能,比如 Project Panama,以及许多更好的预览功能。我无法一一介绍,但我想简要介绍一些我最喜欢的功能。如果你也想尝试一下的话,代码在 这里(https://github.com/spring-tips/java22)。
我喜欢 Java 22,当然也喜欢 GraalVM,这两个版本今天都发布了!Java 当然是我们最喜欢的运行时和语言,而 GraalVM 则是一个高性能的 JDK 发行版,它支持其他语言并允许超前编译(AOT)(它们被称为 GraalVM 原生镜像)。GraalVM 包含新 Java 22 版本的所有功能,还有一些额外的实用工具,所以我一直建议下载此版本。我特别感兴趣的是 GraalVM 原生镜像功能。生成的二进制文件几乎可以立即启动,与 JRE 相比占用的内存也少得多。GraalVM 并不新鲜,但值得注意的是,Spring Boot 拥有一个强大的引擎,支持将 Spring Boot 应用转化为 GraalVM 原生镜像。
简介 我使用的是的 Java SDKMAN 包管理器。在运行 macOS 的苹果 Silicon 芯片上运行。
从 官网 下载安装 GraalVM Community Edition 的预发布版,GraalVM Community 是开源版本。(GraalVM 也有免费的商业版本,但不是开源的)。它允许你通过配置文件引导优化(PGO)等技术构建更快的本地镜像。
解压它,并使用 SDKMAN 命令行工具手动安装,如下所示:
sdk install java 22.07-graalce $HOME/bin/graalvm-jdk-22+36.1/Contents/Home` 然后输入:sdk default java 22.07-graalce,打开了一个新的 shell。输入 javac --version 和 java --version 以及 native-image --version 来验证一切正常。
⚠️ 注意 此版本升级到 Hibernate 6.4.4.Final。虽然它包含了许多有价值的错误修复,但在原生镜像(Native Image)中无法正常工作。如果你正在使用 GraalVM,则应在 pom.xml 中使用 hibernate.version 属性将 Hibernate 暂时降级到 6.4.2.Final。
🐞 Bug 修复 如果路径中包含空格,无法解析嵌套的 JAR URL #39675 当使用较长的镜像名称且标记包含非法字符时,镜像构建会运行很长时间 #39638 Banner 打印不遵守设置的字符集 #39621 “micrometer.observations.” 配置属性应为 “management.observations.” #39600 配置类解析过程中的元数据读取使用默认资源加载器,而不是应用的资源加载器 #39598 当将一些 Gson 属性(包括 spring.gson.disable-html-escaping)设置为 false 时,它们的行为不正确 #39524 当配置属性绑定使用转换器从属性值创建一个 Map 时,属性占位符不会被解析 #39515 Gradle 插件允许使用 Gradle 7.4,但文档和测试的最低版本是 7.5 #39513 WebFlux 自动配置应仅在启用虚拟线程时配置 blocking executor #39469 TestcontainersPropertySource 断言有错别字 #39449 缺少参数时,Webflux actuator 端点的响应为 500 #39444 使用 non-shaded Pulsar 客户端和配置身份验证参数时出现 NoSuchMethod 错误 #39389 Jetty GracefulShutdown 会写入 System.