大家好,我是烤鸭:
最近在把低版本的springboot项目升级,正好翻译了下springboot 2.1-2.3 版本的更新日志。
Github 原文:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.2-Release-Notes
2.1 版本变化:https://blog.csdn.net/Angry_Mills/article/details/113113486
2.3 版本变化:https://blog.csdn.net/Angry_Mills/article/details/113116195
推荐版本: 2.2.12.RELEASE
从Spring Boot 2.1升级
Spring Framework 5.2
此版本升级到Spring Framework 5.2。请参阅Spring Framework的升级文档以获取更多详细信息。
现在默认情况下禁用JMX
从#16090开始,默认情况下不再启用JMX。可以使用configuration属性启用此功能spring.jmx.enabled=true。如果您正在使用IDE功能来管理应用程序,则可能还要在该位置启用该标志。
默认情况下,在Maven插件中启用了Fork
现在默认情况下会分支由Maven插件运行的Spring Boot应用程序。如果您使用来定制属性-D,这些属性将不再传递给Spring Boot应用程序。可以使用-Dspring-boot.run.jvmArguments并指定专用选项来指定此类属性,例如用于启用配置文件。有关更多详细信息,请参考参考文档。
Jakarta EE依赖项
在可能的情况下,我们已经从Spring Boot的启动程序中从具有组ID的Java EE依赖关系转移到具有组ID的等效Jakarta EE依赖关系。除了现有的Java EE API依赖关系依赖管理之外,还添加了对Jakarta EE API依赖关系的依赖管理。将来将删除Java EE API依赖关系的依赖关系管理,并鼓励所有用户转移到Jakarta EE API依赖关系。javax.jakarta.
作为从Java EE到Jakarta EE迁移的一部分,两个依赖项在其最新维护版本中更改了工件ID。 com.sun.mail:javax.mail现在com.sun.mail:jakarta.mail和org.glassfish:javax.el现在org.glassfish:jakarta.el。如果您不太可能直接使用这些依赖关系,请更新您的依赖关系pom.xml或build.gradle相应地进行更新。
JUnit 5
spring-boot-starter-test现在默认提供JUnit 5。默认情况下,包括JUnit 5的老式引擎以支持现有的基于JUnit 4的测试类,以便您可以在准备好迁移到JUnit 5时进行迁移。也可以在同一模块中混合使用基于JUnit 4和基于JUnit 5的测试类。这使您可以根据需要逐步迁移到JUnit 5。
请注意,用于JUnit 4的Maven Surefire插件不支持该listener属性。如果您具有类似于以下内容的Maven配置:
<configuration><properties><property><name>listener</name><value>com.example.CustomRunListener</value></property></properties>
</configuration>
不能使用junit-vintage-engine,而需要显式回滚到JUnit 4:
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId></exclusion><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion><exclusion><groupId>org.mockito</groupId><artifactId>mockito-junit-jupiter</artifactId></exclusion></exclusions></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency>
</dependencies>
AssertJ 3.12
此版本升级到AssertJ 3.12,其中包含与相关的断言的API的重大更改Iterator。有关详细信息,请参见AssertJ发行说明。
集成测试中不再考虑Devtools配置
集成测试中不再考虑主目录中指定的Devtools配置。
Spring HATEOAS 1.0
此版本升级到Spring HATEOAS 1.0,其中包含一些重大的API更改。有关详细信息和可用于简化迁移的脚本,请参见宣布M1版本的博客文章。
迁移用于logging.file size-based的属性
logging.file.max-size并且logging.file.total-size-cap现在正在使用标准DataSize类型替换专有FileSize类型。如果您使用这些属性中的任何一个,请确保与标准格式对齐。
数据源运行状况
该DataSource健康指标包含一个额外的validationQuery与反对使用的验证查询属性DataSource。此外,该hello属性以前提供的查询结果已重命名为result。
Elasticsearch
此版本升级到Elasticsearch 6.7,其中包含一些重大的API更改。请参阅6.5,6.6和6.7的细节重大更改网页。
不推荐使用Elasticsearch transport和Jest客户端,而希望使用其他选项RestHighLevelClient。有关Elasticsearch支持的参考文档已更新。
Hibernate 方言
现在,Spring Boot允许Hibernate选择要使用的方言,而不是根据检测到的数据库应用默认方言。如果您对此功能感兴趣,请确保您未明确指定数据库平台(即通过spring.jpa.database或spring.jpa.database-platform)。
如果您以前配置了方言,则可能要删除自定义项。
执行器HTTP跟踪和审核默认情况下处于禁用状态
由于默认存储库实现是在内存中并且可能消耗太多资源并且不支持群集,因此默认情况下不再启用Actuator HTTP跟踪和审核功能。对于健壮的生产级HTTP跟踪,我们建议使用Spring Cloud Sleuth或类似。
要启用HTTP跟踪,请贡献一个bean实现HttpTraceRepository或AuditEventRepository重新启用这些功能。配置属性可用于关闭这些功能,即使在这些bean存在的情况下也是如此(请参阅management.auditevents.enabled和management.trace.http.enabled)
Gradle 要求
Gradle的最低要求已更改Spring Boot现在需要Gradle 4.10+。请相应升级。
Jetty 日志记录配置
server.jetty.accesslog.* 与日志格式相关的配置属性不再可用(与日志文件相关的配置属性仍然存在)。
如果您的应用程序正在使用这些属性,那么将引入两个新的键,format并且custom-format; format允许您在现有格式中进行选择,custom-format允许您使用自己的格式:
server.jetty.accesslog.format=NCSA # 预定义格式的枚举: NCSA, EXTENDED_NCSA
server.jetty.accesslog.custom-format= # String, 自定义格式会覆盖已经定义的模板
现在,不支持的选项转换为定义自定义日志格式,并使用Jetty的CustomRequestLog中定义的选项。
Hamcrest 2.1
此版本升级到Hamcrest 2.1。对于大多数用户来说,这应该是一个替代品。如果您直接依赖org.hamcrest:hamcrest-core或org.hamcrest:hamcrest-library,请改用新的组合模块org.hamcrest:hamcrest。如果您依靠Hamcrest,则spring-boot-starter-test无需采取任何措施。
Freemarker模板配置
此版本更改了Freemarker模板的默认模板文件扩展名。这可以使Spring Boot与Web应用程序的安全配置默认值保持一致。升级时,请将现有模板从重命名*.ftl为*.ftlh。
Tomcat的MBean注册表
现在默认情况下禁用Tomcat的MBean注册表,节省大约2MB的堆。例如,如果要使用Tomcat的MBean,以便它们可以通过Micrometer公开指标,请将设置server.tomcat.mbeanregistry.enabled为true。
记录最大历史记录
在<rollingPolicy>默认的logback配置已更新为使用<maxHistory>(7天)。可以使用logging.file.max-history配置属性对其进行调整。
HttpHiddenMethodFilter 默认禁用
_method现在默认情况下将禁用处理请求参数的过滤器,因为如果请求正文可能包含参数,则会导致请求正文的早期消耗。这可以通过设置或者被恢复spring.webflux.hiddenmethod.filter.enabled或spring.mvc.hiddenmethod.filter.enabled到true。
健康指标
为了实现新的健康指标组功能,不推荐使用许多类。如果您HealthIndicator通过来配置自定义CompositeHealthIndicatorConfiguration,则需要对其进行更新以使用CompositeHealthContributorConfiguration。
Micrometer “ New Relic” 事件类型
Micrometer 1.3已将随每个指标发布的eventType更改为固定值。这与New Relic最佳做法保持一致。
Spring Boot 2.2将使用 management.metrics.export.newrelic.event-type作为eventType并为上下文添加“ metricName”和“ metricType”属性。如果您未明确设置事件类型属性,则SpringBootSample使用该属性。
如果您更喜欢使用仪表名称作为的先前行为,则eventType可以将 management.metrics.export.newrelic.meter-name-event-type-enabled属性设置为true。
Health Endpoint JSON
在/actuator/health端点已经通过重命名改变所得JSON格式details以components用于第一级元素。这有助于区分由a返回的实际详细信息HealthIndicator和构成综合运行状况的组件指标。
作为更改的结果,执行器介质类型已从application/vnd.spring-boot.actuator.v2+json更改为application/vnd.spring-boot.actuator.v3+json。如果您有需要使用旧格式的工具,则可以使用Accept:V2媒体类型为HTTP标头application/vnd.spring-boot.actuator.v2+json。
DevTools配置目录
现在,全局DevTools设置的首选位置是~/.config/spring-boot。可以使用以下任何文件:
spring-boot-devtools.propertiesspring-boot-devtools.yamlspring-boot-devtools.yml
请参阅参考文档的相关部分以获取更多详细信息。
InMemoryUserDetailsManager
为了防止生成和记录资源服务器应用程序的默认密码,InMemoryUserDetailsManager不会生成JwtDecoder或多个OpaqueTokenIntrospector。如果您希望自定义安全配置以使其需要,则需要InMemoryUserDetailsManager自己创建Bean。
样本项目已重命名并重新放置
示例项目已重命名为冒烟测试,以更好地反映其预期目的。它们也已重新放置在源存储库中,现在可以在此处找到。
Java 13支持
Spring Boot 2.2增加了对Java 13的支持。还支持Java 8和11。
性能提升
通过使用proxyBeanMethods=falseSpring Boot的@Configuration类,减少了启动时间和内存使用量。 proxyBeanMethods是@ConfigurationSpring Framework 5.2 M1中引入的新属性。 proxyBeanMethods也可作为一个属性@SpringBootApplication和@SpringBootConfiguration。
在使用bootRunGradle或spring-boot:runMaven在开发时启动应用程序时,JVM将配置有标志(-Xverify:none和-XX:TieredStopAtLevel=1)以对其进行优化以减少启动时间。在JDK 13上运行时,-Xverify:none未指定,因为已弃用。
此版本中还进行了其他一些性能改进:
- 绑定大量配置属性所需的时间已大大减少
- 当Spring Boot
PersistenceUnit通过扫描JPA实体完全准备一个时,由于它是冗余的,因此Hibernate自己的实体扫描已被禁用 - 自动配置中的注入点已经过改进,仅适用于必须创建bean的情况
- 现在仅在启用和公开端点的情况下(通过JMX或HTTP)创建与Actuator端点相关的Bean。
- 编解码器自动配置的条件已得到改善,以便在不再使用编解码器时不再对其进行配置
- Tomcat的MBean注册表默认情况下处于禁用状态,从而将Tomcat的内存占用量减少了约2MB
延迟初始化
现在可以通过该spring.main.lazy-initialization属性启用全局延迟初始化以减少启动时间。请注意,使用该功能需要付费:
- 在进行任何延迟的初始化时,HTTP请求的处理可能需要更长的时间
- 启动时发生的故障不会后续不会再发生
单个bean可以通过使用注释其定义来选择退出延迟初始化@Lazy(false)。如果无法@Lazy(false)选择退出延迟初始化,LazyInitializationExcludeFilter则可以使用Bean代替。例如,永远不要将IntegrationFlowbean设置为惰性,可以使用以下代码:
@Bean
static LazyInitializationExcludeFilter integrationLazyInitExcludeFilter() {return LazyInitializationExcludeFilter.forBeanTypes(IntegrationFlow.class);
}
Spring Data Moore
Spring Boot 2.2随Spring Data Moore一起提供。请参阅Spring Data Moore博客中的新增功能以了解更多信息。
任务执行和计划的关机配置
自动配置TaskExecutor和TaskScheduler现在均可配置的关机行为,请参见spring.task.execution.shutdown和spring.task.scheduling.shutdown名称空间以获取更多详细信息。
Kubernetes检测
ConditionalOnCloudPlatform 现在可以检测应用程序是否在Kubernetes上运行。
集成测试中的测试应用程序参数
SpringBootTest允许指定将触发创建ApplicationArgumentsBean的应用程序参数。
@ConfigurationProperties 扫描
@ConfigurationProperties现在可以通过类路径扫描找到带注释的类,以替代使用@EnableConfigurationProperties或@Component。添加@ConfigurationPropertiesScan到您的应用程序以启用扫描。
| 注意 | 在Spring Boot 2.2.0中默认启用了配置属性扫描,但是从Spring Boot 2.2.1开始,您必须使用进行选择@ConfigurationPropertiesScan。 |
|---|---|
不可更改的@ConfigurationProperties绑定
配置属性现在支持基于构造函数的绑定,该绑定允许带@ConfigurationProperties注释的类不可更改。可以通过使用注释一个@ConfigurationProperties类或其构造函数之一来启用基于构造函数的绑定@ConstructorBinding。现在可以在配置属性绑定提供的构造函数参数上使用诸如@DefaultValue和的注释@DateTimeFormat。请参阅参考文档的相关部分以获取更多详细信息。
RSocket支持
此发行版中添加了新的Spring Boot启动器spring-boot-starter-rsocket。该入门程序为构建使用RSocket支持的应用程序带来了必需的依赖关系。RSocket策略是自动配置的,以提供使用CBOR和JSON编码和解码RSocket有效负载所需的基础结构。一种RSocketRequester.Builder是自动配置为允许您创建一个RSocketRequester将请求发送到远程方法RSocket服务。有关更多信息,请参阅参考文档的相关部分。
现在,当Spring Security的spring-security-rsocket模块位于类路径上时,就可以对其进行自动配置。自动配置将启用RSocket安全性,并使用Spring Security的拦截器配置服务器RSocket工厂。
测试RSocket服务器应用程序时,该local.rsocket.server.port属性设置为RSocket服务器正在侦听的端口。可以使用将其注入测试类@LocalRSocketServerPort。
ApplicationContextRunner简单的bean注册
ApplicationContextRunner测试实用程序允许内联注册Bean,请参阅 withBean有关详细信息。
RestTemplateBuilder 自定义 request
已添加方法,RestTemplateBuilder以将默认标头添加到所有请求并启用常规请求自定义。
响应式Elasticsearch自动配置
已为Spring Data Moore中引入的反应性Elasticsearch组件添加了自动配置。AReactiveElasticSearchTemplate是使用spring.data.elasticsearch.client.reactive.*属性自动配置的。还提供了对反应式Elasticsearch存储库的自动配置支持。
对线程转储端点的纯文本支持
现在,threaddump执行器端点可以返回与Thread Dump Analyzer和https://fastthread.io都兼容的纯文本线程转储。
Configurable converters for Actuator endpoint input parameters
执行器的输入参数@Endpoint可以使用定制@EndpointConverter注释的转换器进行管理。
Redis缓存配置的回调
RedisCacheManager最近对配置进行了改进,RedisCacheManagerBuilderCustomizerbean使您可以在使用该生成器配置不可变对象之前获取该生成器的句柄RedisCacheManager。
Qualifier for Spring Batch datasource
在具有多个数据源的环境中,DataSource可以使用Bean@BatchDataSource来表明它是Spring Batch使用的那个。
构建信息可重复输出
构建信息目标具有一个额外的time属性,该属性允许配置build.time处理方式。可以完全禁用它,也可以重复将其设置为固定时间以使输出build.properties。
Hazelcast的健康指标
HealthIndicator 支持Hazelcast。
空闲JDBC连接指标
现在可以通过跟踪size和idle指标来跟踪连接池的总大小。如果您有自定义DataSourcePoolMetadata实现,请考虑实现该getIdle方法。
健康指标组
现在可以将健康指标分组。如果将应用程序部署到Kubernetes,这是一个典型示例,您可能需要一组不同的运行状况指示器来进行“活动”和“就绪”探测。
可以通过配置属性来配置组。以下创建custom仅包含DataSource指标的组:
management.endpoint.health.group.custom.include = db
custom可以通过点击来调用该组localhost:8080/actuator/health/custom。有关更多详细信息,请查看更新的参考文档。
Health Endpoint 组件详细信息
从/actuator/health现在返回的组件详细信息现在可以配置为独立于详细信息显示。该management.endpoint.health.show-components 属性方式类似 show-details,可以设置为never,when-authorized或always。
例如,如果您想始终显示构成系统运行状况的各个运行状况指示器,但又不想显示其详细信息,则可以使用:
management.endpoint.health.show-components=alwaysmanagement.endpoint.health.show-details=never
也可以在运行状况指示器组上设置相同的属性。
Flyway JavaMigrations的自动配置
Flyway将被自动配置为使用JavaMigration在应用程序上下文中找到的任何bean。
清除Actuator Endpoints的URI中的属性
configprops和env端点执行的清理操作已得到改进,以包括URI属性。现在将清除URI用户信息中找到的所有密码。
标语
ASCII标语文件现在可以使用来使用ANSI 256颜色转义代码{AnsiColor.NNN}(其中NNN是颜色代码)。您还可以通过将spring.banner.image.bitdepth属性设置为来将它们与图像横幅一起使用8。我们还添加了一个spring.banner.image.pixelmode属性,您可以将其设置block为使用ASCII块字符。
SAML自动配置
当Spring Security的spring-security-saml2-service-provider模块在类路径上时,可以使用Spring Security的SAML 2.0依赖方的自动配置。依赖方可以使用spring.security.saml2.relyingparty.registration.*属性进行注册。
依赖升级
Spring Boot 2.2移至几个Spring项目的新版本:
- Reactor Dysprosium
- Spring AMQP 2.2
- Spring Batch 4.2
- Spring Data Moore
- Spring Framework 5.2
- Spring HATEOAS 1.0
- Spring Integration 5.2
- Spring Kafka 2.3
- Spring Security 5.2
- Spring Session Corn
许多第三方依赖项也已更新,其中一些更值得注意的是:
- Artemis 2.9
- Elasticsearch 6.7
- Flyway 6.0
- Git Commit ID Plugin 3.0
- Hazelcast 3.12
- HSQLDB 2.5
- Jackson 2.10
- Jedis 3.1
- Jersey 2.29
- Kafka 2.3
- Lettuce 5.2
- Micrometer 1.3
- Mockito 3.1
- Solr 8.0
其他改进
除了上面列出的更改之外,还进行了许多小的调整和改进,包括:
loadOnStartup可以将包装后的Servlet为执行器端点。- Flyway引导程序故障由专门的类
FailureAnalyzer覆盖 MessageConverter 支持 kafka的批量监听。- 添加对Jaybird 4(
jdbc:firebird前缀)的支持。 - 添加对Neo4j-OGM 本地类型的选择支持。
- 客户端HTTP指标具有
outcome标签。 - 第三方依赖项的众多升级。
- 现在可以使用以下命令配置Prometheus推送网关
https。 Printer和Parserbean会自动在应用程序转换服务中注册。- 使用H2控制台自动配置时,为了便于连接,现在在启动时记录JDBC连接URL。
- 现在通过
spring.couchbase.username和支持基于Couchbase角色的访问spring.couchbase.password。 - 添加了对OAuth2资源服务器不透明令牌身份验证的支持,可以使用
spring.security.oauth2.resourceserver.opaquetoken配置属性对其进行配置。 - 如果
spring.config.location指定额外扩展,但是没有PropertySourceLoader,则应用程序将快速失败。 - 可以使用
spring-boot.repackage.layout属性在Maven的命令行上设置用于重新打包应用程序的布局。 RestTemplateBuilder#defaultHeader接受多个值。- 自定义资源处理程序可以提供
favicon。 - Kafka的
RecordInterceptor被检测并关联到自动配置的侦听器容器。 - YAML配置现在可以使用
on或off用于布尔类型。 - 现在,
/在使用单独的管理端口时,可以打开执行器发现页面。 @WebMvcTest现在扫描HandlerInterceptorBean。@WebFluxTest扫描WebFilterBean。- JMS侦听器容器的接收的可配置超时。
- 支持Spring Session的刷新模式。
- 对Spring AMQP的支持
confirm-type。 - 用于配置Jetty的线程池的应用程序属性。
- 将@AutoConfigureMockMvc与JUnit 5一起使用时,支持并行测试执行。
- 现在,“Fat Jars”中支持Zip64文件。
- 在
ROLLING_FILE_LOG_PATTERN现在中暴露的logback配置使用。 - 现在,您可以
WebTestClient在任何中注入和使用自定义@SpringBootTest。 - 添加了对Oracle JDBC驱动程序的依赖性管理。
- 添加了对Awaitility的依赖性管理。
Spring Boot 2.2中的弃用
- 该
logging.file属性已重命名为logging.file.name。 - 该
logging.path属性已重命名为logging.file.path。 server.connection-timeout不建议使用该属性,而应使用服务器特定的属性,因为它们的行为并不完全相同。server.use-forward-headers不推荐使用 server.forward-headers-strategy; 以前server.use-forward-headers=true会使用Web服务器的本机支持。现在,您可以使用实现相同的目标server.forward-headers-strategy=native。由于每个服务器都有特定的行为,因此我们现在提供一种替代方法,该替代方法依赖于Spring的ForwardedHeaderFilter:server.forward-headers-strategy=framework。开发人员应使用最适合其用例的选项。ReactiveWebServerApplicationContext#getWebServerFactory。agentMaven插件的属性已重命名为agents。- 不推荐使用Joda的时间,替代为
java.time。 ApplicationHealthIndicatorPing支持HealthIndicator。ConfigurationBeanFactoryMetadata支持ConfigurationPropertiesBean。ConfigurationPropertiesBindingPostProcessor支持@EnableConfigurationProperties或register方法的构造函数。ConfigurationPropertiesBindingPostProcessor.VALIDATOR_BEAN_NAME已移至EnableConfigurationProperties.VALIDATOR_BEAN_NAME。ConfigurationPropertiesBindingPostProcessorRegistrar支持@EnableConfigurationProperties。WebTestClientBuilderCustomizer已移至org.springframework.boot.test.web.reactive.server。