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

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

Actuator 默认映射web

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

@ConditionalOnBeanspring

@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 做为依赖。

 

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

有关详细信息,咱们能够查阅: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 DEFINEDPORT or RANDOMPORT), a WebTestClient is available the same way TestRestTemplate is.

使用 @SpringBootTest 进行 WebTestClient 自动配置

将 @SpringBootTest 用于实际服务器(即 DEFINEDPORT 或 RANDOMPORT)时,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 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) {

runApplication(*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

相关文章
相关标签/搜索