详细介绍Spring Boot 2.0的那些新特性与加强

以Java 8 为基准html

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

内嵌容器包结构调整node

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

Servlet-specific 的server properties调整react

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

Old property New property
server.context-parameters.* server.servlet.context-parameters.*
server.context-path server.servlet.context-path
server.jsp.class-name server.servlet.jsp.class-name
server.jsp.init-parameters.* server.servlet.jsp.init-parameters.*
server.jsp.registered server.servlet.jsp.registered
server.servlet-path server.servlet.path

由此能够看出一些端倪,那就是server再也不是只有servlet了,还有其余的要加入。redis

Actuator 默认映射spring

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

@ConditionalOnBeanmongodb

@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。

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.jpa.databaseplatform=mysql:

spring.jpa.database-platform=mysql

spring.jpa.databasePlatform=mysql

spring.JPA.database_platform=mysql

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来实现:

  • 获取免费Spring B oot2.0 新特性视频详解能够群:725219329

management.endpoints.health.show-details=true

相关文章
相关标签/搜索