大家好,我是烤鸭:
最近在把低版本的springboot项目升级,正好翻译了下springboot 2.1-2.3 版本的更新日志。
Github 原文:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.1-Release-Notes
2.2 版本变化:https://blog.csdn.net/Angry_Mills/article/details/113116126
2.3 版本变化:https://blog.csdn.net/Angry_Mills/article/details/113116195
推荐版本: 2.1.18.RELEASE
从Spring Boot 2.0升级
Spring Framework 5.1
Spring Boot 2.1使用Spring Framework 5.1。有关可能影响您的应用程序的任何更改,请参考其升级指南。
Bean覆写
默认情况下,Bean覆盖已被禁用,以防止意外覆盖Bean。如果您要依赖覆盖,则需要将设置spring.main.allow-bean-definition-overriding
为true
。
自动配置排除
现在,排除项将被一致地应用,而不仅仅是本地应用。这适用于上定义的任何排斥@EnableAutoConfiguration
,@SpringBootApplication
,@ImportAutoConfiguration
或spring.autoconfigure.exclude
财产。
执行器“信息”和“健康”端点安全
Ifspring-security
在类路径上没有任何安全配置,/info
并且/health
现在公开以确保一致性。如果您spring-security
在类路径上,但是不提供任何安全性配置,则需要显式保护它们。
Servlet路径
该server.servlet.path
物业已移至spring.mvc.servlet.path
。如果您以编程方式依赖该属性来知道DispatcherServlet
请使用的路径,请DispatcherServletPath
改用。
@WebMvcTest和@WebFluxTest安全配置
用户配置现在自动包含在Web Slice测试中。@WebMvcTest
寻找WebSecurityConfigurerBean
,而@WebFluxTest
寻找ServerHttpSecurityBean
。
记录优化
debug
当使用Web应用程序(Spring MVC或Spring WebFlux)时,Spring Framework 5.1重新访问了日志输出。如果您尝试调试应用程序,并且想要恢复Spring Boot 2.0样式的日志记录,则应将以下内容添加到您的application.properties
:
logging.level.web =debug
您可能还需要设置spring.http.log-request-details=true
登录实际要求的细节。默认情况下,此属性是false
因为它有可能公开敏感信息。
Narayana JTA支持
Narayana支持已被删除,以支持与Narayana版本更加一致的官方支持。如果您使用spring-boot-starter-jta-narayana
,则新坐标如下:
<dependency><groupId> me.snowdrop </groupId><artifactId> narayana-spring-boot-starter </artifactId><version> 2.0.1 </version>
</dependency>
查看文档以获取更多详细信息。
ActiveMQ池
如果您使用activemq-pool
,则在此发行版中已删除了支持,pooled-jms
以便在支持JMS 2.0的同时提供相同的功能。您可以按以下方式更新构建:
<dependency><groupId> org.messaginghub </groupId><artifactId> pooled-jms </artifactId>
</dependency>
HttpPutFormContentFilter
HttpPutFormContentFilter
已不推荐使用FormContentFilter
。spring.mvc.formcontent.putfilter.enabled
不再定义该属性。如果您正在使用此功能,请更新为spring.mvc.formcontent.filter.enabled
。
OAuth2客户端配置
spring.security.oauth2.client.registration的结构
已在单个树中进行了修改,而不是具有authorizationcode
和clientcredentials 替代的命名空间。
Micrometer ‘all’ SLA Handling
management.metrics.distribution.sla
错误地描述了所有的meter
ID可以被用来设置一个SLA的所有指标。鉴于仪表可能因仪表类型而异,因此无法正确实现此功能。
InfluxDB HttpClient自定义
以前,声明一个OkHttpClient.Builder
足以自定义InfluxDB使用的客户端。为了确保隔离这些定制,请定义一个InfluxDbOkHttpClientBuilderProvider
。
Maven插件
该finalName
属性不再可自定义以与标准Maven插件的行为保持一致。
如果您要自定义repackage
目标,那么现在repackage
必须指定主要执行的ID ,请参阅更新的示例。
Srping.Version POM属性
POM中spring.version
定义的属性spring-boot-dependencies
已重命名。要覆盖Spring Framework版本,您现在应该spring-framework.version
改为使用属性。除非绝对必要,否则我们通常建议您坚持使用托管框架版本。
删除’spring.provides’文件
初学者可以声明一个,META-INF/spring.provides
以便IDE可以确定其提供的依赖项。扫描启动程序POM以获取它声明的直接依赖关系就足够了。如果您负责第三方启动程序并声明了此文件,则可以将其删除。
Thymeleaf Spring Security Extras
Thymeleaf的Spring Security Extras模块的依赖关系管理和自动配置已从thymeleaf-extras-springsecurity4
更改为thymeleaf-extras-springsecurity5
。如果您使用的是模块,则应更新pom.xml
或build.gradle
依赖thymeleaf-extras-springsecurity5
。
Json Simple
json-simple
不再提供的依赖管理,并且JsonParser
使用它的实现也已删除。
Jersey 1
不再支持Jersey 1。请升级到Jersey 2。
Hibernate EhCache支持
如果您hibernate-ehcache
使用EhCache 2作为Hibernate的二级缓存提供程序,则从Hibernate 5.3开始不推荐使用。
Endpoint ID names
如果您已经开发了自己的执行器@Endpoint
bean,则应确保它们遵循Spring Boot 2.1中引入的更严格的命名规则。具体来说,ID应该仅是字母数字,并且必须以字母开头(EndpointId
有关完整的详细信息,请参阅类文档)。
如果您使用-
或.
字符,则Spring Boot 2.1将记录警告并要求您迁移到正确的格式。
Lombok
Spring Boot 2.1已从1.16.x升级到Lombok1.18.x。在1.18中,默认情况下,Lombok将不再生成私有的无参数构造函数。可以通过lombok.noArgsConstructor.extraPrivate=true
在lombok.config
配置文件中进行设置来启用它。有关Lombok变更的更多信息,请参阅其变更日志。
Java Persistence API依赖性
作为升级到Hibernate 5.3的一部分,托管的Java Persistence API依赖项已从更改org.hibernate.javax.persistence:hibernate-jpa-2.1-api
为javax.persistence:javax.persistence-api
。如果您正在使用spring-boot-starter-data-jpa
或依赖于通过Hibernate传递的API,那么您将不受此更改的影响。
JpaProperties
特定于Hibernate的属性已从移入JpaProperties
名为的单独类HibernateProperties
。如果您正在使用JpaProperties.getHibernateProperties(HibernateSettings)
,则现在应同时注入HibernateProperties
和JpaProperties
以确定属性:
Map<String, Object> properties = hibernateProperties.determineHibernateProperties( jpaProperties.getProperties(), new HibernateSettings());
所有嵌入式Web服务器上的最大HTTP标头大小一致
现在,默认的最大HTTP标头大小在四个受支持的嵌入式Web服务器(Jetty,Netty,Tomcat和Undertow)上是一致的,为8KB。大小可以使用server.max-http-header-size
属性进行自定义。
第三方库升级
Spring Boot 2.1建立在Spring Framework 5.1之上,并需要它。
我们已尽可能升级到其他第三方jar的最新稳定版本。此版本中一些值得注意的依赖项升级包括:
- Tomcat 9
- Undertow 2
- Hibernate 5.3
- JUnit 5.2
- Micrometer 1.1
Java 11支持
Spring Boot 2.1仍与Java 8兼容,但现在也支持Java11。我们已配置了持续集成,以针对最新的Java 11版本构建和测试Spring Boot。
DataSize支持
如果属性需要以字节或类似的方便单位表示大小,则可以公开org.springframework.util.unit.DataSize
属性。与Duration
Spring Boot 2.0中引入的支持类似,数据大小支持一种简单的格式(即10MB
10 MB)和元数据支持。所有相关的配置属性已更新为使用新类型。
上下文ApplicationConversionService支持
在ApplicationConversionService
现在默认与注册Environment
和BeanFactory
所创造SpringApplication
。这使您可以将应用程序转换器直接用于核心Spring Framework项目,例如@Value
注释:
@Value("${my.duration:10s}")
private Duration duration;
Profile Expression
配置文件匹配已得到改进,以支持表达式格式。例如production & (us-east | eu-central)
表示匹配,如果production profile是激活的,那么us-east
或 eu-central 都是激活的
。
概要文件表达式可以按如下方式使用:
- 使用启用组件
@Profile
- 加载多配置文件YAML文档
- 使用以下方式启用Logback配置
<springProfile>
任务执行
Spring Boot现在为提供自动配置ThreadPoolTaskExecutor
。如果使用@EnableAsync
,TaskExecutor
则可以删除自定义项,而使用spring.task.execution
命名空间中可用的自定义项。ThreadPoolTaskExecutor
使用可以轻松创建自定义TaskExecutorBuilder
。
任务调度
与新的任务执行支持类似,Spring Boot自动配置一个ThreadPoolTaskScheduler
when @EnableScheduling
。可以使用spring.task.scheduling
名称空间来自定义任务计划程序。TaskSchedulerBuilder
默认情况下,A也可用。
Logging Groups
可以定义记录器组,以允许一次性配置相关记录器。例如,您可以声明一个tomcat
组,该组允许您配置org.apache.catalina
,org.apache.coyote
并org.apache.tomcat
使用单个键记录器:
#定义组
logging.group.tomcat = org.apache.catalina,org.apache.coyote,org.apache.tomcat#使用组(可能在其他配置文件中)
logging.level.tomcat = TRACE
方便web
和sql
团体提供外的开箱。有关详细信息,请参见参考指南。
Maven插件
使用系统属性和环境变量的专用选项对指定参数进行了改进。也可以重新包装和更换classified
神器,看到了更新的文档中的classifier
属性。
JPA设置的引导模式
Spring Data Lovelace为存储库引入了一种“引导模式”。Spring Boot公开了一个属性,可以设置该属性来控制JPA存储库的boostrap模式。例如,要推迟JPA存储库的初始化,只需将以下内容添加到您的配置中:
spring.data.jpa.repositories.bootstrap-mode = deferred
将模式设置为deferred
或时lazy
,JPA设置在单独的线程中进行。
Kafka Streams支持
现在,在声明依赖项时为Kafa Streams提供自动配置org.apache.kafka:kafka-streams
。有关详细信息,请参阅更新的Spring Boot文档和Spring Kafka文档。
Spring Data JDBC支持
Spring Data包括对JDBC的存储库支持,并将自动为上的方法生成SQL CrudRepository
。当必要的依赖项位于类路径上时,Spring Boot将自动配置Spring Data的JDBC存储库。可以将它们添加到您的项目中,而只需依赖于spring-boot-starter-data-jdbc
。
有关Spring Data JDBC的完整详细信息,请参考参考文档。
JMS ConnectionFactory缓存
自动配置ConnectionFactory
默认情况下使用进行缓存,CachingConnectionFactory
直到启用池选项或spring.jms.cache.enabled
将其设置为为止false
。合并选项也已扩展到Artemis(请参阅参考资料spring.jms.artemis.pool.*
)。
Elasticsearch REST客户端
作为Jest的替代选项,命名空间的RestClient
和的自动配置RestHighLevelClient
提供了可配置选项spring.elasticsearch.rest.*
。
JUnit 5
所有@…Test
注释都带有meta注释,@ExtendWith(SpringExtension.class)
因此,如果您使用的是JUnit 5,则可以删除该设置的冗余部分。SpringBoot还使用maven-surefire-plugin
不需要使用任何自定义设置即可使用JUnit 5的版本。
安全
OAuth2 WebFlux支持
添加了对WebFlux OAuth2登录的支持。使用OpenID Connect提供程序可以更轻松地配置OpenID Connect提供程序issuer-uri
,它将断言为它的发行者标识符。
OAuth2资源服务器支持
如果您spring-security-oauth2-resource-server
在类路径中,则只要指定了JWK Set URI,Spring Boot就可以设置OAuth2资源服务器。例如:
spring.security.oauth2.resource.jwt.jwk.set-uri = https://example.com/oauth2/default/v1/keys
MVC和WebFlux应用程序都支持此功能。
非Web OAuth应用程序
现在,InMemoryReactiveClientRegistrationRepository
无论我们使用哪种应用程序类型,我们都提供了一个自动配置的Bean,因此可以更轻松地编写非Web OAuth应用程序。如果您正在编写不使用嵌入式Web服务器的应用程序(例如CLI应用程序),则现在可以直接注入并使用配置的注册存储库。
执行器端点
缓存端点
一个新的/actuator/caches
端点列出了可用的CacheManager
实例及其各自的带有基本元数据的缓存。有关更多详细信息,请参见API。
Spring集成图端点
如果您使用的是Spring Integration,则可以在处公开所有Spring Integration组件的图形表示/actuator/integrationgraph
。请参阅API以获取更多详细信息。
健康终点
一个HealthIndicatorRegistry
bean是现在可以添加和删除HealthIndicator
在运行时。该health
端点也得到了改进,如果需要查询特定指标。例如/actuator/health/db
仅执行“ db” HealthIndicator
。请参阅API以获取更多详细信息。
提供HealthIndicator
了Apache Cassandra的反应式。
Micrometer
通用千分尺标签
通用标签可以声明性地应用于所有仪表,如以下示例所示:
management.metrics.tags.region=us-east-1
management.metrics.tags.stack=prod
上面的示例在所有仪表上分别添加region
和stack
标记,其值分别为us-east-1
和prod
。
对新指标的自动配置支持
指标覆盖范围已得到改进,包括:
- Hibernate metrics
- Spring Framework’s
WebClient
- Kafka consumer metrics
- Log4j2 metrics
- Jetty server thread pool metrics
- Server-side Jersey HTTP request metrics
对新注册表的自动配置支持
在类路径上时,以下度量标准注册表现在已自动配置:
- AppOptics
- Humio
- KariosDB
此外,已添加了对Prometheus推送网关的支持。
其他直方图配置属性
可以使用newmanagement.metrics.distribution.maximum-expected-value.*
和management.metrics.distribution.minimum-expected-value.*
属性来控制每米基准值的最大和最小期望值。
其他改动
除了上面列出的更改之外,还进行了许多小的调整和改进,包括:
- 可以使用来配置Jackson可见性
spring.jackson.visiblity.*
。 WebServiceTemplate
使用自动配置创建一个更容易WebServiceTemplateBuilder
。- 错误页面显示使用Devtools时的堆栈跟踪。
- 不再需要导出虚拟对象
ResourceConfig
以启用Jersey支持。 - JNDI查找已得到改进
resourceRef
,默认情况下启用。 - 可
RetryTemplate
通过访问来自Rabbit基础架构的定制RabbitRetryTemplateCustomizer
。 RabbitTemplate
现在可以配置默认的接收队列- Tomcat的最大吞咽大小现在可以使用属性进行配置
- 现在支持带有Reactor Netty Server的HTTP / 2。
- Kafka自动配置现在支持
errorHandler
transactionManager
和afterRollbackProcessor
bean。 - 添加了对全局生成唯一JMX ObjectName的支持(而不是将此功能限制为Actuator Endpoints)
- 现在对配置属性元数据进行了排序,不赞成使用的项目最后出现。
- 现在的
withDetails
方法Health.Builder
还接受Map
。 ReactiveJwtDecoder
现在,当您定义了发行者URL时,将自动配置反应式。BackgroundPreinitializer
如果spring.backgroundpreinitializer.ignore
设置了系统属性,可以禁用HiddenHttpMethodFilter
可以使用属性禁用- JAP入门POM现在可以在Java 9+上开箱即用
- 现在,在
com.mongodb.client.MongoClient
定义bean(以及更常见的com.mongodb.MongoClient
)时,MongoDB自动配置将退出。 - 您现在可以选择将Jetty RS用作WebClient的HTTP驱动程序
spring.quartz
命名空间中添加了几个配置选项。@ConditionalOnEnabledEndpoint
可以在任何组件上使用(例如,仅端点需要的组件,如果端点被禁用,则不应创建)。@ConditionalOnMissingServletFilterFilterRegistration
在测试是否Filter
缺少bean时可以尊重bean@WebMvcTest
也自动配置Spring Data REST(例如,支持Sort
和Pageable
请求参数)。- 切片测试现在都具有一个
properties
属性,可以根据需要一致地自定义环境 - 支持增加了多个
RestDocsMockMvcConfigurationCustomizer
- 安全配置现已应用于
WebTestClient
。有关测试安全端点的更多信息,请参考Spring Security参考文档的相关部分。 WebExceptionHandlers
支持@WebFluxTest
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
现在可以为管理服务器生成一个单独的随机端口。- 现在,自动配置排除项将始终应用。
Spring Boot 2.1中的弃用
setConnectTimeout(int)
并且setReadTimeout(int)
已被不赞成使用类似方法所取代Duration
。- 设置数据大小的方法,
int(废弃)
已替换为DataSize
。 management.endpoints.jmx.unique-names
不赞成使用spring.jmx.unique-names
- 为了支持使用Spring Security的注释,不推荐使用
secure
on属性。@AutoConfigureMockMvc@WithMockUser
RestTemplateBuilder.basicAuthorization
已不推荐使用basicAuthentication
。REQUEST_WRAPPER_FILTER_MAX_ORDER
在AbstractFilterRegistrationBean
并FilterRegistrationBean
已被替换OrderedFilter.REQUEST_WRAPPER_FILTER_MAX_ORDER
。
配置属性更改
spring.security.oauth2.client.registration.login.*.redirect-uri-template
不赞成使用该物业spring.security.oauth2.client.registration.login.*.redirect-uri
- 该
spring.security.oauth2.resource.jwt.jwk.set-uri
属性已重命名为spring.security.oauth2.resourceserver.jwt.jwk-set-uri
- 该
spring.cloud.enabled
属性已删除(CloudServiceConnectorsAutoConfiguration
如果您需要禁用云连接器,则不包括在内) management.metrics.binders.*.enabled
已删除所有属性,以便直接排除自动配置。