spring-boot 2.7 更新记录 Spring Boot 2.7 发行说明 安迪·威尔金森编辑了此页面 1月20日  ·  33 次修订  页数 196 页数 家 支持的版本 发行说明 v3.1 v3.0 v2.7 旧版本 迁移指南 v2.7 → v3.0 v2.4+ 配置数据 v1.5 → v2.0 帮助 配置绑定 IDE 绑定功能 基于 Spring Boot 构建 使用 GraalVM 进行 Spring Boot 开发流程 使用代码 团队实践 使用 Git 分支 合并拉取请求 有用的 Git 别名 GitHub 问题 Maven POM 文件 性能调优 生成 SSL 密钥库 弃用 创建新的维护分支 在本地克隆此 wiki Spring Boot 2.7 发行说明 从 Spring Boot 2.6 升级 @SpringBootTest 属性源优先级 @SpringBootTest 使用属性 properties 或注释添加的测试属性源 @TestPropertySource 现在添加到命令行属性源上方。 @SpringBootTest 如果您遇到了同时使用 properties and (并且具有相同属性名称)的情况 args ,您可能需要进行更改。 新的飞行路线模块 Spring Boot 2.7 升级到 Flyway 8.5(从 8.0)。自8.0版本以来,Flyway对多种数据库的支持被提取到新的模块中: flyway-firebird (火鸟) flyway-mysql (MariaDB 和 MySQL) flyway-sqlserver (SQL 服务器) 如果您使用 Flyway 管理上述数据库之一的架构,请添加对相应新模块的依赖项。 H2 2.1 Spring Boot 2.7 已升级至 H2 2.1.120。H2 2.x 向后不兼容,并修复了许多安全漏洞。有关更改的详细信息以及如何处理升级,请参阅 H2 更改日志 和 迁移指南。 乔奥Q 没有与 Java 8 和 H2 2.x 兼容的 jOOQ 开源版本。如果您使用的是 Java 11,请考虑使用该 jooq.version 属性升级到 jOOQ 3.16 或更高版本。如果您使用的是 Java 8 并且无法升级,请考虑购买 jOOQ Professional Edition,从 H2 迁移到另一个数据库,或者作为最后的手段,降级到 H2 1.4.x。 Microsoft SQL Server JDBC 驱动器 10 Spring Boot 2.7 已将 MSSQL 驱动程序从 v9 升级到 v10。更新后的驱动程序现在默认启用加密,这可能会破坏现有应用程序。 您可以在本文 的“重大更改”部分中了解有关更改的信息。 建议的建议是在服务器上安装受信任的证书或更新 JDBC 连接 URL 以包含 encrypt=false . 好的HTTP 4 由于 OkHttp 3 不再维护,Spring Boot 2.7 已升级到 OkHTTP 4。作为此升级的一部分,用于控制 OkHttp 版本的属性已从 更改 okhttp3.version 为 okhttp.version 。 OkHttp 4 旨在向后兼容 OkHttp 3。如果您的应用程序不是这种情况,或者由于其他原因希望继续使用 OkHttp 3,请 okttp.version 在 build.gradle 文件中配置该属性。 删除了 netty-tcnative 的单独依赖管理 单独的依赖管理 netty-tcnative 已被删除,取而代之的是 Netty 的 bom 提供的依赖管理。这可以确保 的版本 netty-tcnative 与 Netty 默认使用的版本一致。由于此更改,该 netty-tcnative.version 属性不能再用于覆盖 netty-tcnative . 仍然可以通过提供自己的依赖管理来覆盖该版本,但建议它与 Netty 的默认版本保持一致。 spring.mongodb.embedded.features 配置属性已删除 嵌入式 Mongo 3.4 已放弃对配置 Mongo 功能的支持。反映这一点的是, spring.mongodb.embedded.features 配置属性已被删除。对于指定功能来更改用于启动 Mongo 的命令行的高级配置, MongodConfig 应提供自定义 bean。 Servlet 特定的 Mustache 属性 以下特定于 Servlet 的 Mustache 相关属性已被弃用: spring.mustache.allow-request-override spring.mustache.allow-session-override spring.mustache.cache spring.mustache.content-type spring.mustache.expose-request-attributes spring.mustache.expose-session-attributes spring.mustache.expose-spring-macro-helpers 已引入以下替代品: spring.mustache.servlet.allow-request-override spring.mustache.servlet.allow-session-override spring.mustache.servlet.cache spring.mustache.servlet.content-type spring.mustache.servlet.expose-request-attributes spring.mustache.servlet.expose-session-attributes spring.mustache.servlet.expose-spring-macro-helpers 自动配置的 ReactiveElasticsearchTemplate 上的默认索引选项 自动配置的默认索引选项 ReactiveElasticsearchTemplate 已更改,以使其与 Spring Data Elasticsearch 保持一致。以前,默认值为 strictExpandOpenAndForbidClosed . 他们现在 strictExpandOpenAndForbidClosedIgnoreThrottled 。要恢复旧的索引选项,请定义您自己的 reactiveElasticsearchTemplate bean: @Bean ReactiveElasticsearchTemplate reactiveElasticsearchTemplate(ReactiveElasticsearchClient client, ElasticsearchConverter converter) { ReactiveElasticsearchTemplate template = new ReactiveElasticsearchTemplate(client, converter); template.setIndicesOptions(IndicesOptions.strictExpandOpenAndForbidClosed()); return template; } MongoDB 属性优先级 以前,如果 spring.data.mongodb.uri 与任何等效的单独属性(例如 spring.data.mongodb.host 和 )一起配置 spring.data.mongodb.port ,则会引发异常。该 uri 属性现在优先于任何单独的属性 - spring.data.mongodb.uri 设置时它们将被忽略。这使行为与其他类似属性(例如 spring.redis.url . 在 Maven 进程中运行您的应用程序 Maven 插件的目标 spring-boot:run 是 spring-boot:start 在默认处理的分叉中运行您的应用程序。可以使用 fork 插件的属性来禁用此行为。该属性现已弃用,没有替代品。 有序退出代码生成器 ExitCodeGenerator 现在根据其 Ordered 实现和 @Order 注释进行排序。使用生成的第一个非零退出代码。 指标标签键已重命名 中的公制标签键已 camelCase 重命名,以符合 Micrometer 的建议,即使用全部小写字母和 . 分隔符。以下指标和标签键受到影响: 公制 旧标签键 新标签键 application.ready.time main-application-class main.application.class application.started.time main-application-class main.application.class cache.* cacheManager cache.manager http.client.requests clientName client.name 如果您需要恢复以前的名称,请定义一个实现修改标签键的方法 MeterFilter 的 bean 。 map(Id) 已弃用对 Elasticsearch 的 RestHighLevelClient 的支持 Elasticsearch 已弃用其 RestHighLevelClient . 与此一致,Spring Boot 的自动配置 RestHighLevelClient 已被弃用。 RestClient 如果可能,应使用自动配置的低级别。或者,考虑手动配置 新客户端 。 R2DBC 驱动程序更改 在 Borca 版本 r2dbc-postgresql 中, PostgreSQL 驱动程序的组 ID已从 更改 io.r2dbc 为 org.postgresql 。 r2dbc-mysql ,MySQL 的驱动程序已被删除。考虑用作 r2dbc-mariadb 替代品。 从 WebSecurityConfigurerAdapter 迁移到 SecurityFilterChain Spring Boot 2.7 升级到 Spring Security 5.7,后者已弃用 WebSecurityConfigurerAdapter . 在不使用或使用 Spring Boot 的切片测试(例如 )来 配置 Spring Security WebSecurityConfigurerAdapter @WebMvcTest 时,您可能需要对应用程序进行一些更改,以便通过安全配置类使您的 SecurityFilterChain bean 可用于测试。有关更多详细信息, @Import 请参阅 参考文档。 使用 Maven Shade 插件和 Gradle Shadow 插件构建 Jars Spring Boot 2.7 改变了自动配置和管理上下文类的发现方式。它们现在分别在名为 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 和 的 文件中声明 META-INF/spring/org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration.imports 。 Maven Shade插件的配置 如果您使用的是 maven-shade-plugin 并且不依赖于 spring-boot-starter-parent ,请添加以下 AppendingTransformer 配置: META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports META-INF/spring/org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration.imports Gradle Shadow 插件的配置 添加以下配置以附加文件 .imports : tasks.withType(ShadowJar).configureEach { append("META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports") append("META-INF/spring/org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration.imports") } MIME拉 的依赖管理 org.jvnet.mimepull:mimepull 已被删除。如果您已声明对 的依赖项 mimepull ,请将满足您需要的版本添加到该声明中。 已弃用对 Hazelcast 3.0 的支持 Hazelcast 3 支持已弃用。如果仍然需要降级到 Hazelcast 3, hazelcast-client 应该添加到类路径中来配置客户端。 Spring MVC requestMappingHandlerMapping 不再是主要的 从Spring Framework 5.1开始,Spring MVC已经支持多个 RequestMappingHandlerMapping bean。为了与此保持一致,Spring Boot 2.7 不再将 MVC 的主 requestMappingHandlerMapping bean 定义为 @Primary . 万一您正在注入 RequestMappingHandlerMapping ,如果上下文中有多个此类 bean,您现在需要使用它 @Qualifier 来选择您希望注入的候选者。或者,可以使用 注入所有候选者 List 。 MySQL JDBC 驱动程序 MySQL JDBC 驱动程序的坐标已更改。 com.mysql:mysql-connector-j 8.0.31还发布到 mysql:mysql-connector-java . 在 8.0.32 及更高版本中,它仅发布到 com.mysql:mysql-connector-j . Spring Boot 2.7.8 升级至 8.0.32。如果您使用 MySQL JDBC 驱动程序,请在升级到 Spring Boot 2.7.8 及更高版本时相应更新其坐标。 Spring Boot 2.5 弃用 Spring Boot 2.5 中已弃用的类、方法和属性已在此版本中删除。请确保在升级之前没有调用已弃用的方法。 最低要求变更 没有任何。 新的和值得注意的 提示 检查 配置更改日志 以获取配置更改的完整概述。 新的 Spring GraphQL 启动器 Spring Boot 2.7通过新的启动器提供了对 Spring GraphQL 项目 spring-boot-starter-graphql 的支持。 您可以在Spring Boot 参考文档的 GraphQL 部分 找到更多信息。 支持 RabbitStreamTemplate 如果使用该属性设置流名称,则A RabbitStreamTemplate 会自动配置 spring.rabbitmq.stream.name 。提供了A  RabbitStreamTemplateConfigurer ,类似于 RabbitTemplateConfigurer 自定义附加实例,同时保留自动配置。 Hazelcast @SpringAware 支持 SpringManagerContext 现在默认使用自动配置的 Hazelcast 嵌入式服务器。这使得将 Spring 托管 bean 注入到 Hazelcast 实例化的对象中成为可能。还引入了回调 HazelcastConfigCustomizer 接口,可用于进一步调整 Hazelcast 服务器配置。 信息端点中的操作系统信息 可以 OsInfoContributor 公开有关应用程序运行的操作系统的一些信息: { "os": { "name": "Linux", "version": "5.4.0-1051-gke", "arch": "amd64" } } 默认情况下禁用此新贡献者。可以使用该属性来启用它 management.info.os.enabled 。 Info 端点中的 Java 供应商信息 现有的 JavaInfoContributor 已得到改进,提供了供应商信息的专用部分,包括供应商特定的版本。它现在不是一个顶级的 vendor 简单属性,而是一个具有 name 和 version 属性的专用对象: { "java": { "vendor": { "name": "Eclipse Adoptium", "version": "Temurin-17.0.1+12" }, "..." } 请注意,并非所有供应商都会公开 java.vendor.version 系统属性,因此该 version 属性可能是 null . 在 RSocket 处理程序方法中访问经过身份验证的主体 RSocket 处理程序方法现在可以注入 @Authenticated   Principal : @MessageMapping ("test") Mono hello (@Authenticated Principal p){ return Mono.just ("Hello, " + p.getName()) ; } 不使用 OIDC SDK 的不透明令牌自省 如果您在 OAuth2 资源服务器中使用不透明令牌内省,则自动配置的内省器不再需要依赖于 com.nimbusds:oauth2-oidc-sdk . 根据 SDK 的其他用途,您也许可以从应用程序中删除依赖项。 @DataCouchbaseTest @DataCouchbaseTest 引入了用于测试使用 Spring Data Couchbase 的应用程序的新注释。有关详细信息,请参阅 更新的参考文档 。 @DataElasticsearchTest @DataElasticsearchTest 引入了用于测试使用 Spring Data Elasticsearch 的应用程序的新注释。有关详细信息,请参阅 更新的参考文档 。 SAML2 注销的自动配置 如果您使用 Spring Security 的 SAML2 支持,则可以通过配置属性配置 RP 发起或 AP 发起的注销。有关详细信息,请参阅 更新的参考文档 。 自动配置的更改 自动配置注册 如果您创建了自己的自动配置,则应将注册从密钥 spring.factories 下移至 org.springframework.boot.autoconfigure.EnableAutoConfiguration 名为 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports . 每行包含自动配置类的完全限定名称,而不是单个逗号分隔的列表。有关示例,请参阅 包含的自动配置。 为了向后兼容, spring.factories 仍将保留 中的条目。 新的@AutoConfiguration注释 @AutoConfiguration 引入了新的注释。它应用于注释新 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件中列出的顶级自动配置类,替换 @Configuration . 嵌套在类中或由类导入的配置类应继续像以前一样 @AutoConfiguration 使用。 @Configuration 为了您的方便,还支持通过、和属性进行 @AutoConfiguration 自动配置排序。这可以用作 和 的替代品。 after afterNames before beforeNames @AutoConfigureAfter @AutoConfigureBefore 测试切片配置 如果您创建了自己的测试切片,则应将注册从 移动 spring.factories 到 下的新位置 META-INF/spring/.imports 。该格式与“自动配置注册”部分中描述的新文件相同,请参见上文。 有关示例, 请参阅随附的测试切片。 故障分析器注入 FailureAnalyzer 现在,实现可以通过提供一个将这些值中的一个或两个值作为参数的构造函数来访问当前应用程序上下文的 BeanFactory 和 Environment 。 BeanFactory 对通过实现注入 BeanFactoryAware 和 Environment 通过 EnvironmentAware 在 a 中实现注入的支持 FailureAnalyzer 已弃用,并将在未来版本中删除。 Redis Sentinel 用户名支持 已使用该属性添加了对指定用于向 Sentinel 进行身份验证的用户名的支持 spring.redis.sentinel.username 。 覆盖内置清理 SanitizingFunction beans 现在按顺序调用,一旦函数更改了 .bean 的值,就会停止 SanitizableData 。如果没有 SanitizingFunction Bean 清理该值,则会执行内置的基于键的清理。函数通过其 @Order 注释或 Ordered 实现进行排序。 Docker 镜像构建 Podman 支持 在使用 Cloud Native Buildpacks 构建映像时,Maven 和 Gradle 插件现在支持使用 Podman 容器引擎作为 Docker 引擎的替代方案。 有关更多详细信息,请参阅更新的 Gradle 和 Maven参考文档。 Cache2k 支持 添加了 Cache2k 的依赖管理和自动配置。可以通过定义 Cache2kBuilderCustomizer bean 来自定义默认缓存设置。 Jackson Mixins 的简化注册 Jackson 的自动配置现在将扫描应用程序的包中以 @JsonMixin . 找到的任何类都会自动注册为具有自动配置的 mixin  ObjectMapper 。 使用 PEM 编码证书的 Web 服务器 SSL 配置 嵌入式 Web 服务器可以配置为使用带有 PEM 编码证书和私钥文件的 SSL,使用属性 server.ssl.certificate 和 server.ssl.certificate-private-key ,以及可选的 server.ssl.trust-certificate 和 server.ssl.trust-certificate-private-key 。可以使用类似的 management.server.ssl.* 属性来保护管理端点。请参阅 文档 中的示例。这是作为使用 Java KeyStore 文件配置 SSL 的替代方法提供的。 依赖升级 Spring Boot 2.7 迁移至多个 Spring 项目的新版本: 春季数据 2021.2 春季 HATEOAS 1.5 春季 LDAP 2.4 春季安全5.7 春季会议 2021.2 许多第三方依赖项也已更新,其中一些更值得注意的如下: 弹性搜索 7.17 飞路8.5 H2 2.1 榛卡斯特 5.0 无限跨度13 杰森2.9 Json路径2.7 卡夫卡3.1 玛丽亚数据库3.0 千分尺1.9 MongoDB 4.5 好的HTTP 4.9 放心休息 4.5 R2DBC Borca 各种各样的 除了上面列出的更改之外,还进行了许多细微的调整和改进,包括: Kafka idlePartitionEventInterval 可以使用该 spring.kafka.listener.idle-partition-event-interval 属性进行配置。 KafkaTemplate   transactionIdPrefix 可以使用属性来配置属性 spring.kafka.template.transaction-id-prefix 。 Netty maxKeepAliveRequests 可以使用该 server.netty.max-keep-alive-requests 属性进行配置。 @DataJdbcTest 自动扫描 AbstractJdbcConfiguration 豆子。 使用 SAML 2.0 登录时, bean UserDetailsService 不再自动配置。 可以使用该 spring.batch.jdbc.isolation-level-for-create 属性配置Spring Batch的事务隔离级别。 用于记录 Spring MVC 指标的过滤器现在可以通过定义您自己的 FilterRegistrationBean bean 来替换。 的 ID DatabaseDriver.MARIADB 已更改 mysql 为 mariadb in返回 InputStream 的现在实现了. RandomAccessDataFile spring-boot-loader available() Spring Kafka immediateStop 可以使用该 spring.kafka.listener.immediate-stop 属性进行配置。 新属性 spring.mustache.reactive.media-types 可以用于配置反应式 Mustache 视图支持的媒体类型。 现在,当Elasticsearch RestClientBuilder 和beans位于类路径中 RestClient 时,会自动配置。 elasticsearch-rest-client 如果 elasticsearch-rest-high-level-client 位于类路径上, RestHighLevelClient bean 仍将像以前一样自动配置,但请注意, RestHighLevelClient 现在已弃用对 的支持。 Spring Boot 2.7 中的弃用 spring.factories 不推荐从加载自动配置。请参阅上文了解更多详情。 DatabaseDriver.GAE 下的属性 spring.security.saml2.relyingparty.registration.{id}.identityprovider 已移至 spring.security.saml2.relyingparty.registration.{id}.assertingparty . 使用旧的属性名称会导致启动时日志消息处于 WARN 级别。