Spring Boot 2.0 新特性和发展方向

本贴最后更新于 2456 天前,其中的信息可能已经事过景迁

本文由黑壳网发布

本文来源 Spring Boot 2.0 新特性和发展方向! - 黑壳网 http://blog.bhusk.com/articles/2018/03/01/1519890949484.html

壳叔搞笑时间

几个同学聚会,别人都说开车来的,就不喝酒了。我没车只好说:我家里有四套房子,今天就不喝酒了!

正文

以 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 下:

由此可以看出一些端倪,那就是 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 扩展:

关于我们

程序员太辛苦了

请善待你们身边的每一位程序员~

欢迎在评论写下你的程序员自黑体呦,嗯,相信你可以滴~~~~~~

以上内容,均来自互联网~

欢迎扫描二维码加入我们的组织
黑壳网交流群 Qq:200408242


  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3453 回帖 • 203 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    944 引用 • 1459 回帖 • 16 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • zk123

    上波最佳

ykz200
我是壳叔,我正在想一个很棒的idea 青岛

推荐标签 标签

  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 9 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    125 引用 • 169 回帖
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    729 引用 • 1327 回帖
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    209 引用 • 2031 回帖
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 585 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    247 引用 • 1348 回帖
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    75 引用 • 1737 回帖 • 3 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 723 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 334 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖 • 2 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    110 引用 • 54 回帖
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 616 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 664 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    342 引用 • 708 回帖
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 510 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 683 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 787 关注
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    17 引用 • 53 回帖 • 137 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    25 引用 • 191 回帖 • 16 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 134 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 629 关注