环境
-
6 (6.3 or later). 5.6.x is also supported but in a deprecated form
-
Spring Framework 5.3.8 or above is also required
-
jdk8…14
重大更新
版本控制方案更改
从2.4开始, Spring Boot 采用 新的Spring版本控制方案 - 这意味着您应该在 build.gradle /pom.xml 文件中 将 2.3.5.RELEASE 更新为 2.4.0 .
|
JUnit 5’s Vintage Engine 从`spring-boot-starter-test` 中删除
如果您升级到springboot2.4并看到JUnit类的测试编译错误,例如`org.junit.Test`, 这可能是因为JUnit5的老式引擎已经从 spring-boot-starter-test
中移除.
Vintage 引擎允许JUnit4编写的测试由JUnit5运行.
如果不想将测试迁移到JUnit 5并希望继续使用JUnit 4,请在Vintage引擎上添加一个依赖项,如以下Maven示例所示:
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
如果您使用的是Gradle,则等效配置如以下示例所示:
testImplementation("org.junit.vintage:junit-vintage-engine") {
exclude group: "org.hamcrest", module: "hamcrest-core"
}
配置文件处理 (application properties and YAML files)
SpringBoot2.4改变了处理 application.properties
和`application.yml` 文件的方式。
如果您只有一个简单的 application.properties
或 application.yml
文件,那么您的升级应该是无缝的。
但是,如果您有更复杂的设置(with profile specific properties, or profile activation properties),如果你想使用新特性,则可能需要做出 v2.4-config-data-migration-guide
如果您只想使用与SpringBoot2.3兼容的逻辑,可以在 application.properties
或 application.yml
文件中将 spring.config.use-legacy-processing”属性设置为 `true
。
Config Data Imports
Config 位置 通过 spring.config.location
和 spring.config.import
(在此版本中引入) 来指定 .如果文件或文件夹不存在,将不再自动失败.
如果您想导入一个位置,但如果找不到它,您不介意跳过它,现在应该在它前面加上 optional:
。
For example, spring.config.location=optional:/etc/config/application.properties`将 从 `/etc/config/
位置导入一个 application.properties
文件,前提是它存在 , 如果没有,就跳过它。
如果要将所有位置视为可选位置,可以在 SpringApplication.setDefaultProperties(…)
设置 spring.config.on-not-found=ignore
或者使用systemenvironment变量。
嵌入式数据库检测
嵌入式数据库逻辑已被细化,以将数据库视为仅嵌入在内存中的数据库。
如果在H2、HSQL和Derby中使用基于文件的持久性或服务器模式,则此更改会产生两种后果:
-
sa
用户名不再设置. 如果你依赖这种行为,你就需要设置spring.datasource.username=sa
在您的配置中. -
这样的数据库将不再在启动时初始化,因为它们不再被认为是嵌入式的。 您可以像往常一样使用
spring.datasource.initialization-mode
设置.
用户定义的 MonogoClientSettings不再自定义
如果您正在提供自己的 MongoClientSettings
bean,则自动配置不再对其进行自定义。
如果您依赖于这种行为,特别是结合嵌入式Mongo,请考虑将定制器应用到您自己的bean中,如下面的示例所示:
@Bean
public MongoClientSettings userDefinedMonogoClientSettings(MongoProperties properties, Environment environment) {
MongoClientSettings.Builder builder = MongoClientSettings.builder();
//...
new MongoPropertiesClientSettingsBuilderCustomizer(properties, environment).customize(builder);
return builder.build();
}
Logback 配置 Properties
已重命名特定于Logback的日志属性,以反映它们特定于Logback的事实。以前的名称已被弃用。
以下Spring引导属性已更改:
-
logging.pattern.rolling-file-name
→logging.logback.rollingpolicy.file-name-pattern
-
logging.file.clean-history-on-start
→logging.logback.rollingpolicy.clean-history-on-start
-
logging.file.max-size
→logging.logback.rollingpolicy.max-file-size
-
logging.file.total-size-cap
→logging.logback.rollingpolicy.total-size-cap
-
logging.file.max-history
→logging.logback.rollingpolicy.max-history
以及它们映射到的系统环境属性:
-
ROLLING_FILE_NAME_PATTERN
→LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN
-
LOG_FILE_CLEAN_HISTORY_ON_START
→LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START
-
LOG_FILE_MAX_SIZE
→LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE
-
LOG_FILE_TOTAL_SIZE_CAP
→LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP
-
LOG_FILE_MAX_HISTORY
→LOGBACK_ROLLINGPOLICY_MAX_HISTORY
默认Servlet注册
springboot2.4将不再注册servlet容器提供的 DefaultServlet
。 在大多数应用程序中,它没有被使用,因为spring mvc的 DispatcherServlet
是唯一需要的servlet。
如果您发现仍然需要默认servlet,可以将 server.servlet.register default servlet
设置为 true
。
默认情况下,HTTP跟踪不再包括cookie头
`默认情况下,HTTP跟踪中不再包括Cookie`请求头和`Set Cookie`响应头。
要恢复SpringBoot2.3的行为,请将 management.trace.http.include
设置为 cookies,errors,request headers,response headers
。
Undertow 重定向Path
默认情况下,在转发请求时,Undertow保留原始请求URL。
此版本将覆盖Undertow默认值以符合Servlet规范。
通过将属性 server.undertow.preserve-path-on-forward
设置为 true
,可以恢复以前的Undertow默认行为。
Neo4j
这个版本带来了对Neo4j支持的重大改进。
`spring.data.neo4j.*`中的一些属性已经被删除,对neo4j OGM的支持也被删除。
Neo4j驱动程序的配置是通过 `spring.Neo4j.`名称空间完成的,尽管来自`data`名称空间的URI和基本身份验证仍然以不推荐的方式受到支持。
更多关于这一变化的细节,以及Spring Data Neo4J 6带来了什么, check the documentation.
Hazelcast 4
此版本升级到Hazelcast 4,同时保持与Hazelcast '3.2.x' 的兼容性。
如果您还没有准备好切换到Hazelcast 4,您可以在build使用`Hazelcast.version` 属性降级。
Elasticsearch RestClient
low-level Elasticsearch RestClient
bean 将不再由Spring Boot自动配置.
一个`RestHighLevelClient` bean 仍自动配置.
大多数用户不需要使用低级客户端,也不应受到此更改的影响。 |
R2DBC
R2DBC的核心基础设施已经转移到Spring框架,并带有一个新的`Spring-R2DBC` 模块。
如果您正在使用此基础结构,请确保将不推荐使用的访问迁移到新的核心支持。
Flyway
Flyway 7 的升级包括对回调排序的 一些更改。
对于依赖我们通过`@Order` 和`Ordered` 支持的注册订单的任何人来说,这将是一个重大变化。
如果您使用的是Flyway 5,请确保在升级到Spring Boot 2.4之前先升级到Flyway 6,因为Flyway只保留一个功能版本的架构升级。 |
移除Flatten Maven Plugin的插件管理
spring boot的构建不再使用flatte maven插件 (flatten-maven-plugin
), 相应的插件管理已被移除.
如果您依赖于springboot的版本管理,那么您应该添加自己的插件管理。
exec-maven-plugin
版本管理
exec-maven-plugin
h版本管理已被移除.
如果您正在使用此插件,请确保在您自己的 pluginManagement
中指定一个版本。
Spring Boot Gradle 插件
Spring Boot Gradle 插件 bootJar
任务的 DSL 已更新,以便可以使用 Property<String>
配置 mainClass
。
如果当前使用 mainClassName
,例如:
bootJar {
mainClassName 'com.example.ExampleApplication'
}
你应该更新为 mainClass
:
bootJar {
mainClass 'com.example.ExampleApplication'
}
集成测试中的 Metrics export
@SpringBootTest
不再配置可用的监控系统,只提供内存中的 MeterRegistry
。
如果您将指标作为集成测试的一部分导出,您可以将 @AutoConfigureMetrics
添加到您的测试中以恢复之前的行为。
Spring Boot 2.2 到 2.3的弃用策略
为反映 Spring Bootrelease 兼容性策略,Spring Boot 2.2 中弃用的代码已在 Spring Boot 2.4 中删除。 Spring Boot 2.3 中弃用的代码仍然存在,并计划在 Spring Boot 2.5 中删除。
Spring Framework 5.3
Spring Boot 2.4 使用 Spring Framework 5.3。
Spring Framework 5.3 what’s new section .
Spring Data 2020.0
Spring Boot 2.4 包含 Spring Data 发布系列的 2020.0 版(代号为 Ockham)。
参阅 Spring Data wiki 。
Neo4j
此版本支持反应式存储库,并依赖于 Neo4j 驱动程序的单独自动配置。 因此,现在可以在有或没有 Spring Data 的情况下使用 Neo4j。
Neo4j 的健康检查使用驱动程序并且只要配置了 Neo4j 驱动程序就可用。
如果你想在响应式访问中使用 @Transactional
,你现在需要自己配置 Neo4jReactiveTransactionManager
bean。
@Bean(ReactiveNeo4jRepositoryConfigurationExtension.DEFAULT_TRANSACTION_MANAGER_BEAN_NAME)
public ReactiveTransactionManager reactiveTransactionManager(Driver driver,
ReactiveDatabaseSelectionProvider databaseNameProvider) {
return new ReactiveNeo4jTransactionManager(driver, databaseNameProvider);
}
R2DBC
R2dbcEntityTemplate
可用于通过实体简化 Reactive R2DBC 的使用
Java 15 Support
Spring Boot 2.4 现在完全支持(并针对)Java 15。支持的最低版本仍然是 Java 8。
Custom property name support
当使用构造函数绑定时,属性的名称是从参数名称派生的。 如果您想使用 java 保留关键字,这可能是一个问题。对于这种情况,您现在可以使用 @Name
注释,例如:
@ConfigurationProperties(prefix = "sample")
@ConstructorBinding
public class SampleConfigurationProperties {
private final String importValue;
public SampleConfigurationProperties(@Name("import") String importValue) {
this.importValue = importValue;
}
}
上面的示例公开了一个 sample.import
属性。
默认启用分层 jar
此版本启用分层 jar 并默认包含 layertools。 这应该会提高使用开箱即用的构建包生成layer的效率,并让您在 crafting custom Dockerfile
时受益于该功能。
导入额外应用程序配置
只要你还没有将 spring.config.use-legacy-processing
设置为 true
,你现在就可以直接从你的主 application.properties
或 application.yml
导入额外的属性和 yaml 文件。
您可以使用 spring.config.import
属性来指定一个或多个应导入 Spring Environment
的附加配置文件。 参阅 this section .
我们已经发布了 a short blog 解释了我们进行这些更改的原因。 |
卷挂载配置目录树
spring.config.import
属性还可用于导入 Kubernetes 常用的配置树。配置树是提供键值对的另一种方式。每对都在自己的文件中声明,文件名构成属性键,文件内容提供值。
完整的例子, 请阅读 updated reference documentation.
默认情况下,从配置树加载的属性会修剪尾随换行符。
导入没有文件扩展名的配置文件
某些云平台只允许您批量挂载没有文件扩展名的文件。如果您有这样的约束,现在可以通过向 Spring Boot 提供有关内容类型的提示来导入这些文件。例如,spring.config.import=etcmyconfig[.yaml]
会将 etcmyconfig
作为 YAML 加载。
Origin Chains
Origin
接口已更新为新的 getParent()
方法。这使我们能够提供完整的来源链,可以准确显示项目的来源。
例如,您可以在 application.properties
中使用 spring.config.import
来导入第二个文件。从第二个文件加载的属性的 Origin
将有一个指向原始导入声明的父级。
您可以通过查看 actuatorenv
或 actuatorconfigprops
执行器端点的输出来自己尝试。
Startup Endpoint
现在可以使用一个新的“Startup” 执行器端点,显示有关您的应用程序启动的信息。端点可以帮助您识别启动时间比预期更长的 bean。
这项工作建立在最近添加到 Spring Framwork 5.3 的应用程序启动跟踪功能的基础上。您可以阅读有关该功能的更多信息 in the Spring Framework reference documentation.
新 actuator API 为 documented here.
Docker/Buildpack 支持
发布镜像
验证
使用 Spring Boot 的 buildpack 支持时,您现在可以为构建器或运行映像使用经过身份验证的私有 Docker registry。支持 username/password 和基于令牌的身份验证。
Paketo Buildpack 默认值
Maven 插件 spring-boot:build-image
目标和 Gradle 插件 bootBuildImage
任务默认使用的镜像构建器已经升级到最新的 Paketo 镜像。 Paketo 镜像Registry已从 Google Container Registry 更改为 Docker Hub,以提高可访问性。
Maven Buildpack 支持
spring-boot:build-image
Maven goal 现在将所有项目模块依赖项放在“application”层中。这意味着如果您的构建中有多个项目模块,它们现在都将在同一层中结束。
XML schema 也已更新,以允许使用新的 <includeModuleDependencies>
和 <excludeModuleDependencies>
元素自定义层。
参阅 updated Maven documentation for details.
Gradle Buildpack 支持
bootBuildImage
Gradle 任务现在将 all 项目模块依赖项放在“application”层中。这意味着如果您的构建中有多个项目模块,它们现在都将在同一层中结束。
自定义层时,您还可以在 DSL 中使用 includeProjectDependencies()
和 excludeProjectDependencies()
。
参阅 updated Gradle documentation for details.
Redis Cache Metrics
如果您使用 Redis 缓存,您现在可以通过 Micrometer 公开缓存统计信息。记录的指标包括放置、获取和删除的数量以及未命中数。挂起请求的数量和锁定等待持续时间也被记录下来。
要启用该功能,请将 spring.cache.redis.enable-statistics
设置为 true
。
Web Configuration Properties
添加了属性以支持使用 Spring MVC 或 Spring WebFlux 配置 Web 区域设置和资源位置。
新属性是:
-
spring.web.locale
-
spring.web.locale-resolver
-
spring.web.resources.*
添加了一个新属性以支持使用 servlet 或反应式 Web 堆栈配置执行器管理endpoint:
-
management.server.base-path
这些 Spring MVC 和 servlet 特定属性已被弃用,取而代之的是支持任一 Web 堆栈的新属性:
-
spring.mvc.locale
-
spring.mvc.locale-resolver
-
spring.resources.*
-
management.server.servlet.context-path
Register @WebListeners-允许他们注册 servlet 和过滤器
Servlet @WebListener
类现在以这样一种方式注册,它们可以自己注册 servlet 和过滤器。
早期版本的 Spring Boot 使用对 javax.servlet.Registration.Dynamic
的调用来注册它们。 这意味着 Servlet 规范 (4.4) 的以下部分适用:
如果 ServletContext 传递给 ServletContextListener 的 contextInitialized 方法,其中 ServletContextListener 既未在 web.xml 或 web-fragment.xml 中声明,也未使用 @WebListener 进行注释,则必须为 ServletContext 中定义的所有方法抛出 UnsupportedOperationException 以编程配置 servlet、过滤器 和监听器。
从 Spring Boot 2.4 开始,我们不再使用动态注册,因此从 ServletContextListener.contextInitialized
方法调用 event.getServletContext().addServlet(…)
和 event.getServletContext.addFilter(…)
是安全的。 。
Cassandra 的切片测试
额外的测试切片可用于使用 @DataCassandraTest
测试依赖于 Cassandra 的组件。 像往常一样,默认情况下只配置 Cassandra 存储库和所需的基础设施。
这是一个使用 Testcontainers 和 @DynamicPropertSource
的例子:
@DataCassandraTest(properties = "spring.data.cassandra.local-datacenter=datacenter1")
@Testcontainers(disabledWithoutDocker = true)
class SampleDataCassandraTestIntegrationTests {
@Container
static final CassandraContainer<?> cassandra = new CassandraContainer<>().withStartupAttempts(5)
.withStartupTimeout(Duration.ofMinutes(2));
@DynamicPropertySource
static void cassandraProperties(DynamicPropertyRegistry registry) {
registry.add("spring.data.cassandra.contact-points",
() -> cassandra.getHost() + ":" + cassandra.getFirstMappedPort());
}
...
}
Flyway 7
此版本升级到 Flyway 7,带来了一些额外的属性。 对于开源版本,我们添加了以下 spring.flyway
属性:
-
url
-
user
-
password
如果您使用的是“团队”版本,您还可以使用:
-
cherry-pick
-
jdbc-properties
-
oracle-kerberos-cache-file
-
oracle-kerberos-config-file
-
skip-executing-migrations
H2 控制台的 web 管理员密码的配置属性
引入了一个新的配置属性,spring.h2.console.settings.web-admin-password
,用于配置 H2 控制台的 web 管理员密码。
密码控制对控制台首选项和工具的访问。
CqlSession-Based Health Indicators for Apache Cassandra
引入了新的基于 CqlSession
的健康指标,CassandraDriverHealthIndicator
和 CassandraDriverReactiveHealthIndicator
。
当 Cassandra 的 Java 驱动程序位于类路径上时,将自动配置这些指标之一。
现有的基于 Spring Data Cassandra 的健康指标已被弃用。
使用 Prometheus 过滤抓取
Actuator 的 Prometheus 端点 /actuator/prometheus
现在支持 includedNames
查询参数,可用于过滤响应中包含的样本。
有关更多详细信息,请参阅 Actuator API 文档。
Spring Security SAML 配置属性
已添加属性以允许配置 SAML2 信赖方注册的解密凭据和断言消费者服务 (ACS)。 属性如下:
故障分析器
即使未创建“应用程序上下文”,现在也会考虑 FailureAnalyzer。 这使他们还可以分析在“环境”处理期间抛出的任何异常。
除非创建了“ApplicationContext”,否则不会使用任何实现“BeanFactoryAware”或“EnvironmentAware”的分析器。 |
Jar 优化
当生成可运行的Spring Boot jar时,空的starter依赖项现在将被自动删除。由于大多数启动程序只提供可传递的依赖关系,所以将它们打包到最终jar中没有什么意义。
Spring Boot 注释处理器也被删除,因为它们只在构建期间有用。 它们是“spring-boot-autoconfigure-processor”和“spring-boot-configuration-processor”。
如果您有自己的不包含代码的启动器 POM,您可以在其 MANIFEST.MF 中添加一个 Spring-Boot-Jar-Type 条目,其值为“dependencies-starter”。
如果要过滤掉注释处理器,可以添加值为“annotation-processor”的相同属性。
|
If you have your own starter POMs that contain no code, you can add a Spring-Boot-Jar-Type entry to its MANIFEST.MF with the value "dependencies-starter".
If you want to filter out an annotation processor, you can add the same property with the value "annotation-processor".
|
其它
除了上面列出的更改之外,还有许多小的调整和改进,包括:
-
运行应用程序的JVM版本现在在启动时被日志记录。
-
尾部空格会自动从
logging.config
的值中删除。. -
R2DBC pool支持公开了其他配置属性。.
-
LdapTemplate
中的异常处理可以配置为忽略某些异常。 -
ISO date time offset 格式 支持MVC和Webflux.
-
添加一个配置属性以选择新的“PathPatternParser”而不是“AntPathMatcher”来解析和匹配请求映射路径模式.
-
@DurationUnit
,@DataSizeUnit
, and@PeriodUnit
注解可以在使用`@ConstructorBinding`的构造方法中注解属性. -
自动配置的“RabbitConnectionFactory” 检查是CredentialsProvider”和“CredentialsRefreshService” 否存在“。.
-
A health group 可以仅仅使用排除项来定义.
-
可以使用
management.health.db.ignore-routing-data-sources
在健康检查中忽略`AbstractRoutingDataSource`。 -
可以配置SAML依赖方的localEntityIdTemplate
-
HTTP跟踪是纳秒精度的度量.
-
当缺少 Liquibase 更新日志时,专用的
FailureAnalyzer
会提供有意义的消息 -
Netty的请求解码器可以使用
server.netty.*
属性. -
Liquibase Maven Plugin 的插件管理,与 Spring Boot 版本管理的 Liquibase 版本一致。
-
Prometheus PushGateway 的 Basic authentication 支持 .
-
当Jedis和Lettuce都可以使用时,可以允许通过
spring.redis.client-type
选择Jedis. -
允许通过
spring.redis.lettuce.cluster.refresh.dynamic-sources
禁用Redis群集动态源刷新使用 . -
参考文档现在包括所有配置示例的
Properties
和YAML
-
现在可以使用
spring.rsocket.fragment-size
属性自定义 RSocketServer 的片段大小. -
现在可以使用属性
logging.charset.console
和logging.charset.file
配置 Logback 和 Log4j 日志记录使用的字符集。 -
Gradle’s configuration cache在使用Gradle 6.7或更高版本构建Spring引导应用程序时支持。
依赖项升级
Spring Boot 2.4迁移到几个Spring项目的新版本:
-
Spring AMQP 2.3 (what’s new)
-
Spring Batch 4.3 (what’s new)
-
Spring Data 2020.0 (changelog)
-
Spring Framework 5.3 (what’s new | upgrading)
-
Spring Integration 5.4 (what’s new)
-
Spring HATEOAS 1.2 (migration guide)
-
Spring Kafka 2.6 (what’s new)
-
Spring Retry 1.3
-
Spring Security 5.4 (what’s new)
-
Spring Session 2020.0
许多第三方依赖项也已更新,其中一些更值得注意的是:
-
Artemis 2.13
-
AssertJ 3.18
-
Elasticsearch 7.9
-
Flyway 7
-
Jersey 2.31
-
JUnit 5.7
-
Liquibase 3.10
-
Lettuce 6.0 (release notes)
-
Micrometer 1.6 (release notes)
-
Mockito 3.4
-
MongoDB 4.1
-
Oracle Database 19.7
-
Reactor 2020.0 (release notes)
-
RSocket 1.1
-
Undertow 2.2
Spring Boot 2.4中的弃用
-
ConfigFileApplicationListener
已经被弃用,取而代之的是`ConfigDataEnvironmentPostProcessor`. -
与
contextClass
相关的SpringApplicationBuilder
和SpringApplication
方法已被弃用,取而代之的是使用contextFactory
的替代方法。 -
CloudFoundryVcapEnvironmentPostProcessor
的一些方法已被弃用以与EnvironmentPostProcessor
更新一起使用(这些应该会影响大多数用户). -
BuildLog
构建包支持类已弃用一些方法,并用提供更多详细信息的替代方法替换它们 -
LoggingSystemProperties
中的 Logback 常量已被弃用,取而代之的是LogbackLoggingSystemProperties
. -
UndertowServletWebServerFactory
中的`isEagerInitFilters`/setEagerInitFilters
已经被isEagerFilterInit
/setEagerFilterInit
取代. -
ApplicationEnvironmentPreparedEvent
,ApplicationStartingEvent
andSpringApplicationRunListener
的一些方法 已经被启用以支持BootstrapContext
. -
buildpack支持的“BuildLog”已更新,以支持更多数据 (大多数用户不会直接使用这个类).
-
一些springmvc和servlet特定的属性已经被弃用 (请参阅下面的Web配置属性部分).
-
使用Spring data Cassandra的健康指标已经被弃用,取而代之的是使用原始驱动程序的健康指标.
New and Noteworthy
参阅 Configuration properties change between 2.2.7.RELEASE and 2.3.0.RELEASE 查看有关配置更改的完整概述。
|