Spring Boot 2.0 新特性和发展方向

以Java 8 为基准

Spring Boot 2.0 要求Java 版本必须8以上, Java 6 和 7 不再支持。

内嵌容器包结构调整

为了支持reactive使用场景,内嵌的容器包结构被重构了的幅度有点大。EmbeddedServletContainer被重命名为WebServer,并且org.springframework.boot.context.embedded 包被重定向到了org.springframework.boot.web.embedded包下。举个例子,如果你要使用TomcatEmbeddedServletContainerFactory回调接口来自定义内嵌Tomcat容器,你现在应该使用TomcatServletWebServerFactory。

Servlet-specific 的server properties调整

大量的Servlet专属的server.* properties被移到了server.servlet下:

Old propertyNew property
server.context-parameters.*server.servlet.context-parameters.*
server.context-pathserver.servlet.context-path
server.jsp.class-nameserver.servlet.jsp.class-name
server.jsp.init-parameters.*server.servlet.jsp.init-parameters.*
server.jsp.registeredserver.servlet.jsp.registered
server.servlet-pathserver.servlet.path

由此可以看出一些端倪,那就是server不再是只有servlet了,还有其他的要加入。

Actuator 默认映射

Actuator的端点(endpoint)现在默认映射到/application,比如,/info 端点现在就是在/application/info。但你可以使用management.context-path来覆盖此默认值。

@ConditionalOnBean

@ConditionalOnBean现在的判断条件由OR变为了AND。

Remote CRaSH shell

1.5的时候此远程工具被标为deprecated,2.0的时候将会把这个支持彻底remove掉,以及基于此功能的项目也会被删除掉。

Spring Loaded不再支持

由于Spring Loaded项目已被移到了attic了,所以不再支持Spring Loaded了。现在建议你去使用Devtools。Spring Loaded不再支持了。

Hazelcast自动配置不再支持

不能再自动配置HazelcastInstance进行缓存。 因此,spring.cache.hazelcast.config属性不再可用。

默认connection pool变了

默认的连接池已经由Tomcat切换到了HikariCP。如果你过去使用spring.datasource.type在基于Tomcat的应用程序中强制使用Hikari,现在你可以删除这个覆盖了。同样的,如果想要使用Tomcat的连接池,只需要简单的加入以下配置就可以了:

spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource

Servlet Filters

针对一个Filter默认的dispatcher类型现在为 DipatcherType.REQUEST,这样就保证了Spring Boot和Servlet默认的配置统一了。

Spring Security

Spring Security的 filter 现在可以自动配置如下类型了: ASYNC, ERROR, and REQUEST 。这样就让Spring Boot中的配置和Spring Security默认配置保持一致了。

Spring Session

Spring Session的 filter 现在支持自动配置如下dispatcher类型 ASYNC, ERROR, and REQUEST 。同样是为了让Spring Boot的配置与Spring Session的默认配置保持一致。值得注意的是从Spring Session 2.0起, Mongo和GemFire 将不再被支持。

Jetty

要求Jetty最低版本为9.4。

Tomcat

要求Tomcat最低版本为8.5。

Hibernate

要求Hibernate最低版本为5.2。

Gradle

要求Gradle最低版本为3.4。

SendGrid

SendGrid最低支持版本是3.2。为了支持这次升级,username和password已经被干掉了。因为API key现在是唯一支持的认证方式。

Starter 的传递依赖的改变

以前有几个Spring Boot starter是依靠Spring MVC和spring-boot-starter-web传递的。 为了对Spring WebFlux的支持,spring-boot-starter-mustache和spring-boot-starter-thymeleaf不再依赖spring-boot-starter-web。现在你要自己选择并添加spring-boot-starter-web或spring-boot-starter-webflux作为依赖。

记住:web和webflux是平行的关系。我们之前的文章中提到过spring webflux。你可以移步查看:Spring 5 新增全新的reactive web框架:webflux。

Solr健康指标

针对Solr的健康检查信息不再是solrStatus这个属性了。现在是status property,是一个标准状态属性,对应于一个的整型值。

默认代理策略

Spring Boot现在默认是使用CGLIB代理,同时包含AOP支持。如果你需要基于代理(proxy-based)的代理策略,你需要把spring.aop.proxy-target-class设置为false。

基于CLI的测试

从Spring Boot的CLI中删除了测试支持,现在建议你使用Maven或Gradle构建应用程序,去使用它们提供的丰富的测试支持吧。

@ConfigurationProperties

@ConfigurationProperties里的ignoreNestedProperties属性已被删除。

Multipart配置改变

为了更好的反映Servlet的特性, spring.http.multipart. 属性已经被命名为 spring.servlet.multipart。

ps:其实就是因为webflux来了,只能把servlet和webflux区分开来。

Mustache 模板默认文件扩展名

过去Mustache模板的默认的文件扩展名是.html。现在.mustache成了官方指定的扩展名,而且很多的IDE插件已经支持了此后缀。你可以通过spring.mustache.suffix来覆盖现在的默认的支持。

Spring Framework 5.0

Spring Boot 2.0 是建立在Spring Framework 5.0之上的(最低要求)。Spring 5最大的亮点就是reactive。你可以去看看这篇:Spring 5 新增全新的reactive web框架:webflux。

松绑定改善

松绑定已经得到改善。这里简单的举个例子:

简单的属性在删除特殊字符然后转成小写后进行绑定。比如:

下面的属性最终都会被映射为spring.jpa.databaseplatform=mysql:

spring.jpa.database-platform=mysql

spring.jpa.databasePlatform=mysql

spring.JPA.database_platform=mysql

有关详细信息,我们可以查阅:https://github.com/spring-projects/spring-boot/wiki/Relaxed-Binding-2.0

WebFlux 和 WebFlux.fn支持

Spring Boot 2.0 提供了一个新的starter ,用来支持Reactive Spring web frameworks。该starter为spring-boot-starter-webflux。其中Reactor Netty是默认的web引擎(spring-boot-starter-reactor-netty)。

Reactive数据库支持

Spring Boot 2.0 对一下的数据库提供了自动配置( auto-configuration )的reactive的支持:

  • MongoDB (spring-boot-starter-data-mongodb-reactive)
  • Redis (spring-boot-starter-data-redis-reactive)
  • Cassandra (spring-boot-starter-data-cassandra-reactive)

@DataMongoTest测试注解也是支持reactive的。

@WebFluxTest支持


Reactive controller现在可以使用@WebFluxTest来测试。它提供的功能和 @WebMvcTest类似。而且WebTestClient可以直接使用,已经被自动配置(auto-configured)了。

支持使用@SpringBootTest自动配置WebTestClient


当你使用@SpringBootTest with an actual server (that is, either DEFINED_PORT or RANDOM_PORT), a WebTestClient is available the same way TestRestTemplate is.

使用@SpringBootTest进行WebTestClient自动配置

将@SpringBootTest用于实际服务器(即DEFINED_PORT或RANDOM_PORT)时,WebTestClient的可用方式与TestRestTemplate相同。

Gradle插件


Spring Boot的Gradle插件已在很大程度上被重写,以实现一些重大的改进。有关这方面的就不细讲了,感兴趣的同学可以去一探究竟。

/loggers端点POST的状态码改变

针对/loggers端点上POST操作的状态码已又200改为204。

Elasticsearch

Elasticsearch已升级到5.4。 与Elastic公司宣布不再支持嵌入式Elasticsearch的情况一样,NodeClient的自动配置已被删除。就是这么的节奏一致。现在你可以通过使用spring.data.elasticsearch.cluster-nodes自动配置TransportClient,具体value可以是一个或多个要连接的节点的地址。

Quartz Scheduler


Spring Boot 2 针对Quartz调度器提供了支持。你可以加入spring-boot-starter-quartz starter来启用。而且支持基于内存和基于jdbc两种存储。

Spring Data Web配置

Spring Boot公开了一个新的spring.data.web配置名称空间,可以轻松配置分页和排序。

Json starter

一个全新的spring-boot-starter-json starter 聚合了很多常用的json工具,可以支持对json的读写。

它不仅仅提供了jackson-databind而且当你使用java8时候,还提供了有用的模块:jackson-datatype-jdk8, jackson-datatype-jsr310 和 jackson-module-parameter-names。

之前使用jackson-databind的地方就可以使用这个新的starter了。

Thymeleaf starter

Thymeleaf starter现在包含了thymeleaf-extras-java8time,开箱即用。

InfluxDB

如果InfluxDB java client 和 the spring.influx.url 被设置, 一个InfluxDB client现在就会被自动配置。而且现在支持认证。

JdbcTemplate

Spring Boot自动配置(auto-configuration)的JdbcTemplate现在可以通过spring.jdbc.template命名空间进行定制。 此外,自动配置(auto-configuration)的NamedParameterJdbcTemplate在底层就是JdbcTemplate。

jOOQ

Spring Boot现在可以根据DataSource自动检测出jOOQ方言(类似于JPA方言)。

此外,还引入了@JooqTest用于只有jOOQ才能hold的测试场景。

@DataRedisTest

新加了一个测试的时候针对redis的新注解。

强大的Mongo客户端自定义

现在可以通过MongoClientSettingsBuilderCustomizer这个bean来高度定制化Spring Boot的Mongo客户端。

Cassandra

spring.data.cassandra 现在支持池化(pooling)。

Kafka listener支持批量消费

现在支持一次性批量消费多个ConsumerRecord,你可以创建一批的监听器(listener),这样设置:

spring.kafka.listener.type=batch

Web filters 初始化

Web filters 现在在所有支持的容器中都会被立刻初始化。也就是eagerly,急加载。

Auto-configuration 报告

现在不满足条件(unconditional)的class也会被包含进来,在自动配置(auto-configuration)的Actuator端点的response中一并返回。

重置logger操作

现在Loggers端点(endpoint) 支持reset日志级别到默认设置。

Maven 插件属性

插件的配置属性现在的暴露方式有所改变,现在所有的都是以spring-boot为前缀,这是为了避免和其他插件冲突而导致错误。

比如,以下命令行可以启用profile foo:

mvn spring-boot:run -Dspring-boot.run.profiles=foo

Devtools 远程调试

已经从Devtools中删除了通过HTTP进行远程调试的支持。(#9489)

Jetty

为了和Tomcat和Undertow看齐,现在对Jetty的所有的http method的请去都进行压缩,而不是之前那样只对GET request进行压缩(#8184)。

Reactive server 自定义

当配置一个reactive web server时,针对Jetty,Tomcat,Undertow的定制化器现在会被调用 (#9572)。

Jolokia

Jolokia不再是一个endpoint。并且默认是禁用的,这已和其他的web端点保持了一直。它的配置已转移到了management.jolokia。如果想启用 Jolokia, 向你的配置加入management.jolokia.enabled=true就可以了。

数据库迁移

Liquibase 和 Flyway 配置的key 已被转移到了spring 的命名空间下:(比如: spring.liquibase and spring.flyway )。

Auto-configuration排序

@AutoConfigureOrder 默认值由Ordered.LOWEST_PRECEDENCE变为0。 (#10142)

Auto-configuration测试工具

一个新的ApplicationContextRunner 测试工具让我们测试自动配置变得容易。 未来将会把所有的测试套件都迁移到这个模型上。

Java 9 支持

基本支持了Java 9。之所以是“基本”,是因为还没得到用户的验证。

Jedis变为了Lettuce

Redis客户端驱动现在由Jedis变为了Lettuce。使用Jedis的同学们,大概知道方向了吧。

但仍然支持Jedis,那么exclude掉io.lettuce:lettuce-core,然后添加 redis.clients:jedis就是了。

OAuth 2.0 支持

Spring Security OAuth 项目中的功能将会迁移到Spring Security中。将会OAuth 2.0。

Mockito 1.x

Mockito 1.x不再支持@MockBean和@SpyBean。 如果你不使用spring-boot-starter-test来管理依赖关系,则应升级到Mockito 2.x。

JSON-B 支持


除了Jackson 和 Gson,现在还支持了JSON-B 。JSON测试支持也已更新为新的JsonbTester类。

Session Endpoint

Spring Session 用现在可以通过/application/sessions Actuator Endpoint进行查找和删除session。

ConfigurationProperties 验证

如果你希望@ConfigurationProperties对象上开启验证,那么只需要添加@Validated就可以了。

Spring Mobile

针对Spring Mobile的自动配置和依赖不再支持,已被删除。汗,我们之前的文章中还介绍过这个项目:使用Spring Boot开发一个Spring Mobile程序。

Spring WebFlux支持错误约定

Spring Boot现在让WebFlux的错误约定和MVC保持一致就像使用MVC一样:默认视图和JSON响应错误,自定义错误视图等等。

TLS 配置 和 HTTP/2 支持

你现在可以为你的WebFlux应用配置SSL,使用server.ssl.*配置属性。Tomcat, Jetty, Undertow 和 Reactor Netty都支持。

你现在也可以为你的MVC 或 WebFlux应用配置HTTP/2:

使用server.http2.enabled

@KafkaListener支持使用@SendTo

使用了自动配置工厂的Kafka listener现在支持@SendTo

Kotlin扩展

Spring Boot 2.0 发布了Kotlin runApplication扩展:

package com.example.demo

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class DemoApplication
fun main(args: Array<String>) {
runApplication<DemoApplication>(*args)
}

Job command line runner 顺序

CommandLineRunner 现在执行批处理job的启动order是0。

支持自动配置的模板化欢迎页

Spring Boot 2.0 现在支持静态和模板化两种欢迎页类型。它会首先去配置好的静态内容的目录下查找index.html文件,如果没找到,然后就去查找index模板。 只要找到了一个就会被用作欢迎页。

Context path会在启动时被打印

在Spring Boot之前的版本中,对context path貌似并没有那么的重视一样。现在当我们使用内嵌容器的时候, context path 会被打印在HTTP 端口的旁边,像这样:

Tomcat started on port(s): 8080 (http) with context path ‘/foo’

测试优化,自动扫描Converter和GenericConverter

Converter 和 GenericConverter beans现在可以被@WebMvcTest和@WebFluxTest自动扫描到了。

Health vs. Status

status endpoint 已经被删除了,现在改成了health。这个health 端点既可以展示status也可以有更多的细节。 health 端点现在默认是被暴露的(只展示status)。如果你希望展示更多的细节信息,可以通过修改属性management.endpoints.health.show-details来实现:

management.endpoints.health.show-details=true


money.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

剑指Offer - 面试题40. 最小的k个数(排序/大顶堆)

1. 题目 输入整数数组 arr &#xff0c;找出其中最小的 k 个数。例如&#xff0c;输入4、5、1、6、2、7、3、8这8个数字&#xff0c;则最小的4个数字是1、2、3、4。 示例 1&#xff1a; 输入&#xff1a;arr [3,2,1], k 2 输出&#xff1a;[1,2] 或者 [2,1]示例 2&#xff…

Nature:大批学者正在涌向工业界,与国内趋势相反?

文 | 杨净 明敏 发自 凹非寺源 | 量子位Nature最新发文&#xff1a;学术界正刮起一阵离职潮。这当中&#xff0c;处于职业中期的科学家尤甚。而他们的集体归宿&#xff0c;是转向工业界。事实上&#xff0c;这种趋势由来已久。早在2018年一项研究预测显示&#xff0c;高等教育将…

剑指Offer - 面试题54. 二叉搜索树的第k大节点(二叉树循环遍历)

1. 题目 给定一棵二叉搜索树&#xff0c;请找出其中第k大的节点。 示例 1: 输入: root [3,1,4,null,2], k 13/ \1 4\2 输出: 4示例 2: 输入: root [5,3,6,2,4,null,null,1], k 35/ \3 6/ \2 4/1 输出: 4限制&#xff1a; 1 ≤ k ≤ 二叉搜索树元素个数来源&#xf…

Spring Boot中使用LDAP来统一管理用户信息

很多时候&#xff0c;我们在构建系统的时候都会自己创建用户管理体系&#xff0c;这对于开发人员来说并不是什么难事&#xff0c;但是当我们需要维护多个不同系统并且相同用户跨系统使用的情况下&#xff0c;如果每个系统维护自己的用户信息&#xff0c;那么此时用户信息的同步…

剑指Offer - 面试题53 - II. 0~n-1中缺失的数字(二分、位运算)

文章目录1. 题目2. 解题2.1 充分利用题目信息2.2 位运算2.3 二分查找1. 题目 一个长度为n-1的递增排序数组中的所有数字都是唯一的&#xff0c;并且每个数字都在范围0&#xff5e;n-1之内。在范围0&#xff5e;n-1内的n个数字中有且只有一个数字不在该数组中&#xff0c;请找出…

大厂如何决定裁掉谁?

文 | 祝乐源 | 曲速纪元说明&#xff1a;本文并非以具体某一家大厂为具体描述对象&#xff0c;每家公司有其特殊的流程&#xff0c;因此所描述的流程不一定适合所有公司。只是提供一个大厂裁员的逻辑框架&#xff0c;具体操作上可能存在流程和操作上的节点增加以及前后顺序变化…

Spring Boot中使用Flyway来管理数据库版本

久违了的Spring Boot系列&#xff0c;今天抽空更新一篇。去年写过很多篇关于数据访问的文章了&#xff0c;比如下面这些&#xff1a; 使用JdbcTemplate使用Spring-data-jpa简化数据访问层&#xff08;推荐&#xff09;多数据源配置&#xff08;一&#xff09;&#xff1a;JdbcT…

剑指Offer - 面试题53 - I. 在排序数组中查找数字 I(二分查找的变形版本)

1. 题目 统计一个数字在排序数组中出现的次数。 示例 1: 输入: nums [5,7,7,8,8,10], target 8 输出: 2示例 2: 输入: nums [5,7,7,8,8,10], target 6 输出: 0限制&#xff1a; 0 < 数组长度 < 50000类似题目&#xff1a;LeetCode 34. 在排序数组中查找元素的第一个…

码农创造了AI,但开发AI不再需要码农了??

马上就要到一年一度的618大促&#xff0c;卖萌酱在添加购物车时&#xff0c;选择困难症又犯了。如今的电商评论区&#xff0c;大量刷单行为淹没了重要的产品评价&#xff0c;有的被淹没在了追评区&#xff0c;有的平台甚至已经不分好评/中评/差评区了&#xff0c;而是“一眼望去…

LeetCode 1351. 统计有序矩阵中的负数

1. 题目 给你一个 m * n 的矩阵 grid&#xff0c;矩阵中的元素无论是按行还是按列&#xff0c;都以非递增顺序排列。 请你统计并返回 grid 中 负数 的数目。 示例 1&#xff1a; 输入&#xff1a;grid [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]] 输出&#xff1a;…

码农创造了AI,但开发AI不再需要码农了

马上就要到一年一度的618大促&#xff0c;卖萌酱在添加购物车时&#xff0c;选择困难症又犯了。 如今的电商评论区&#xff0c;大量刷单行为淹没了重要的产品评价&#xff0c;有的被淹没在了追评区&#xff0c;有的平台甚至已经不分好评/中评/差评区了&#xff0c;而是“一眼望…

JPA的多表复杂查询

最近工作中由于要求只能用hibernatejpa 与数据库进行交互&#xff0c;在简单查询中&#xff0c;jpa继承CrudRepository<T, ID>接口 &#xff0c;然后利用jpa的方法命名规范进行jpql查询&#xff0c;然而在进行复杂查询时&#xff0c;需要继承JpaSpecificationExecutor接口…

LeetCode 1352. 最后 K 个数的乘积

1. 题目 请你实现一个「数字乘积类」ProductOfNumbers&#xff0c;要求支持下述两种方法&#xff1a; add(int num) – 将数字 num 添加到当前数字列表的最后面。getProduct(int k) – 返回当前数字列表中&#xff0c;最后 k 个数字的乘积。 – 你可以假设当前列表中始终 至少…

颠覆认知!数据增强、正则化可导致不易察觉的灾难?

文 | 子龙编 | 智商掉了一地作为常用的炼丹技巧&#xff0c;正则化 (Regularization) 和数据增强 (Data Augmentation, DA) 常常被简单粗暴地引入模型中来防止数据过拟合&#xff0c;进而提升最后的 performance。如果说&#xff0c;更高的performance就意味着更好的泛化能力&a…

spring-boot-starter-swagger 1.3.0.RELEASE:新增对JSR-303的支持和host的配置

简介 该项目主要利用Spring Boot的自动化配置特性来实现快速的将swagger2引入spring boot应用来生成API文档&#xff0c;简化原生使用swagger2的整合代码。 源码地址 GitHub&#xff1a;https://github.com/dyc87112/spring-boot-starter-swagger码云&#xff1a;https://git…

LeetCode 1353. 最多可以参加的会议数目(排序+贪心,优先队列,难)

文章目录1. 题目2. 解题2.1 错误解2.2 超时解2.3 通过解2.4 大佬解1. 题目 给你一个数组 events&#xff0c;其中 events[i] [startDayi, endDayi] &#xff0c;表示会议 i 开始于 startDayi &#xff0c;结束于 endDayi 。 你可以在满足 startDayi < d < endDayi 中的…

深圳率先立法:支持L3自动驾驶上路,凡公开道路皆可行

文 | 万博 发自 副驾寺源 | 智能车参考全国第一个开放L3级自动驾驶的城市&#xff0c;就要来了。不是自动驾驶第一城的广州&#xff0c;也不是拥有全球首个高级别自动驾驶示范区的北京&#xff0c;最先吃螃蟹的&#xff0c;是深圳。根据深圳人大常委会发布的2022年立法计划&…

在Pivotal Web Service上发布Spring Boot应用

Hello PWS&#xff08;Pivotal Web Service&#xff09;&#xff0c;由 Pivotal 公司提供的 &#xff0c;可以运行Java, Grails, Play, Spring, Node.js, Ruby on Rails, Sinatra or Go 等Web应用的服务。本文将介绍一个 Hello World 级别的 Spring Boot 应用发布到 PWS 的过程…

CVPR 2022 | FAIR提出MaskFeat:自监督视觉预训练新方法!灵感之一来自16年前CVPR论文...

编 | 小咸鱼 好困源 | 新智元【导读】近日&#xff0c;北大校友、约翰霍普金斯大学博士生提出了一种新的方法&#xff1a;MaskFeat&#xff0c;摘下12个SOTA&#xff01;这是一个能用于视频模型的自监督预训练方法&#xff1a;掩码特征预测&#xff08;MaskFeat&#xff09;。论…

简化Swagger使用的自制Starter:spring-boot-starter-swagger,欢迎使用和吐槽

项目简介 该项目主要利用Spring Boot的自动化配置特性来实现快速的将swagger2引入spring boot应用来生成API文档&#xff0c;简化原生使用swagger2的整合代码。 GitHub&#xff1a;https://github.com/dyc87112/spring-boot-starter-swagger码云&#xff1a;http://git.oschi…