《Spring Boot 实战开发》 附录 II : Spring Boot 2.0 新特性

《Spring Boot 实战开发》 附录 II : Spring Boot 2.0 新特性

本节我们介绍 Spring Boot 2.0 版本的众多新特性,内容包括了 M1~M7里程碑版本的核心新功能特性。不过,我们首先把对 Kotlin 的特性的支持放在最前面讲,因为这是一个让人兴奋、迫不及待想要第一时间了解的特性。

Kotlin 特性支持

由于Kotlin是Spring Boot的第一语言,所以得到了很大的支持。Spring Boot 2.0为Kotlin提供了专门的扩展,这让我们可以更好地使用Spring Boot 框架,同时也充分发挥出 Kotlin编程语言特性中的价值。
Kotlin 是一种来自 JetBrains 的面向对象的语言,它支持函数式编程。它的主要优势之一是与 Java 有非常高的互操作性。通过引入对 Kotlin 的专门支持,Spring 5.0 中全面吸纳了这一优势。它的函数式编程风格与 Spring WebFlux 模块完美匹配,它的新路由 DSL 利用了函数式 Web 框架以及干净且符合语言习惯的代码。可以像清单中这样极简地表达端点路由:

代码清单 Kotlin 的用于定义端点的路由 DSL

@Bean
fun apiRouter() = router {
    (accept(APPLICATION_JSON) and "/api").nest {
        "/book".nest {
            GET("/", bookHandler::findAll)
            GET("/{id}", bookHandler::findOne)
        }
        "/video".nest {
            GET("/", videoHandler::findAll)
            GET("/{genre}", videoHandler::findByGenre)
        }
    }
}

Spring Boot 2.0版本已经有 M1~M7共7个里程碑版本,目前是RC1版本。每个里程碑迭代里面都有一些新功能的加入以及旧方法的修改与删减。下面我们就来分别介绍各个里程碑的新功能特性。
Spring Boot 2.0.0 M1 Release Notes
从1.5 版本升级
此版本中已删除在 Spring Boot 1.5 中弃用的类、方法和属性。如果升级,需要确保在升级之前不调用已否决的方法。

基于Java 8

Spring Boot 2.0 需要 Java 8 或更高版本。不再支持 Java 6 和7。

嵌入式容器封装结构

为了支持reactive编程, 嵌入式容器(embedded containers) 包结构被大量重构。关于EmbeddedServletContainer重构的变化如下表所示:

1.5 版本中的类/包 对应到2.0 M1版本中的类/包
EmbeddedServletContainer WebServer
org.springframework.boot.context.embedded org.springframework.boot.web.embedded
TomcatEmbeddedServletContainerFactory TomcatServletWebServerFactory

Servlet 服务器属性配置

许多 server.* 的servlet 的属性已移动到server.servlet.* 命名空间下,如下表所示:

旧属性 新属性
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.path server.servlet.path

Actuator默认映射路径

Actuator endpoints 现在默认映射路径是 /application 。例如, /info 端点现在对应 /application/info 这个 URL 路径。 使用 management.context-path 上下文路径属性可以重写此默认值。

@ConditionalOnBean
@ConditionalOnBean 现在使用 AND 逻辑作为条件判断,而不是之前的OR 逻辑了。

远程CRaSH Shell
不再支持远程CRaSH Shell,删除远程SSH执行器(actuator)支持。

Spring Loaded
移除Spring Loaded支持。改用 Devtools。

专用 Hazelcast 自动配置
不支持自动配置一个通用(general) HazelcastInstance的同时还自动配置一个专用(dedicated) HazelcastInstance 进行缓存。因此, spring.cache.hazelcast.config 属性不再可用。

默认连接池
默认连接池已从 Tomcat 切换到 HikariCP(现在性能最好的JDBC连接池组件, HikariCP在github上的地址:https://github.com/brettwooldridge/HikariCP)。如果使用 spring.datasource.type 强制在 Tomcat-based 应用程序中使用Hikari, 现在可以删掉了。

Servlet Filters
Servlet Filter默认的调度程序类型(dispatcher type)现在采用 DipatcherType.REQUEST。使得Spring Boot的默认值与 Servlet 规范的默认值保持一致。

Spring Security
Spring Security的 Filter 现在自动配置使用 ASYNC, ERROR, 和REQUEST调度程序类型. 使得Spring Boot的默认配置与Spring Security’的默认配置保持一致.

Spring Session
Spring Session的 Filter 现在自动配置使用 ASYNC, ERROR, 和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 的 Java 客户端的最低支持版本现在是3.2。为了支持此升级, 用户名和密码属性已被删除, 因为 API 密钥现在是唯一支持的身份验证方法。

启动器Starter可传递依赖项(transitive dependencies)
以前的一些Spring Boot starters是自动传递依赖于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 属性。而状态属性现在是定义的, 对应于标准状态属性的整数值。

默认代理策略
我们知道,在Spring AOP中,有个选项如下:
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
注意:proxy-target-class属性值决定是基于接口的还是基于类的代理被创建。
如果proxy-target-class 属性值被设置为true,那么基于类的代理将起作用(这时需要cglib库)。
而现在在默认情况下, Spring Boot使用 CGLIB 代理, 包括用于 AOP 支持。如果您需要使用标准的JDK 基于接口的代理, 则需要设置 spring.aop.proxy-target-class为 false。

CLI-based testing
测试支持已从 Spring 启动的 CLI 中删除, 转而使用 Maven 或 Gradle 来构建应用程序, 并利用其丰富的测试支持。

@ConfigurationProperties
ignoreNestedProperties 属性已被删除。

Multipart配置
为了更好地反映它们的 Servlet 特性, spring.http.multipart.* 配置属性已重命名为 spring.servlet.multipart.*。

Mustache templates模板默认文件扩展名
Mustache模板的默认文件扩展名是. html, 现在是.mustache,与官方规范和大多数 IDE 插件保持一致。您可以通过更改 spring.mustache.suffix 配置键来重写此新默认值。

WebFlux 和 WebFlux. fn 支持
Spring Boot 2.0 提供了一个新的启动器starter, 用于支持Reactive Spring Web框架编程。spring-boot-starter-webflux 里面包含了WebFlux框架, 同时还有默认的Web Engine: Reactor Netty (spring-boot-starter-reactor-netty).

Reactive data support
Spring Boot 2.0为以下数据存储提供自动配置:

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

同时,注解@DataMongoTest也支持reactive repositories。

@WebFluxTest 支持
可以使用 @WebFluxTest 提供与 Spring MVC @WebMvcTest 类似的支持来测试Reactive 控制器。另外,该注解还自动配置了WebTestClient。

使用 @SpringBootTest 自动配置WebTestClient
当使用 @SpringBootTest测试Web服务,WebTestClient 的使用方式与 TestRestTemplate 相同。

Gradle 插件
Spring Boot 的 Gradle 插件已经被大部分重写, 以使许多重大的改进。关于这些改进点,您可以在参考:https://github.com/spring-projects/spring-boot/issues?utf8=%E2%9C%93&q=label%3A%22theme%3A%20gradle-plugin%22%20milestone%3A2.0.0.M1%20
和 api 文档:https://docs.spring.io/spring-boot/docs/2.0.0.BUILD-SNAPSHOT/gradle-plugin/reference/html/
了解有关插件功能的更多信息。

构建可执行的 jar 和war
bootRepackage 任务已被替换为 bootJar 和 bootWar ,分别构建可执行的 jar 和war。这两项任务都扩展了它们的等价标准 Gradle jar 或 war 任务, 使您能够访问所有常见的配置选项和行为。

依赖关系管理
Spring Boot的 Gradle 插件不再自动应用依赖项管理插件。取而代之的是, Spring Boot’s plugin现在通过导入正确版本spring-boot-dependencies bom来响应依赖项管理插件的应用。这使您可以更好地管理控制和配置依赖关系。对于大多数 Spring Boot应用程序来说,只需要使用依赖项管理插件(dependency management plugin)这已经是完全够用的了,配置如下:
apply plugin: 'io.spring.dependency-management'
请注意, 依赖项管理插件dependency-management plugin仍然是 spring-boot-gradle-plugin 插件的一个传递依赖, 因此无需将其作为类路径classpath 依赖项列在您的 buildscript 配置中。

Spring Boot 2.0.0 M2 Release Notes
默认连接池 connection pool
默认连接池已从 Tomcat 更改为Hikari。如果在提供 tomcat-jdbc 的环境中使用Hikari, 现在可以删除 spring.datasource.type 的重写。同样, 如果您想继续使用 Tomcat 连接池, 只需将以下内容添加到您的配置中:
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
/loggers endpoint POST请求返回的状态码
对 /loggers endpoint 的 POST 请求的返回的状态码从 200 (OK) 改为 204(No Content)。
Elasticsearch
Elasticsearch 升级到版本 5.4。根据Elastic的公告, 嵌入式 Elasticsearch 不再支持, 自动配置的 NodeClient 已被删除。TransportClient 的自动配置可以通过使用属性配置
spring.data.elasticsearch.cluster-nodes
来提供一个或多个要连接的节点的地址。
关于Spring Boot 集成Elasticsearch的开发我们将在后面的章节中详细介绍。
Quartz Scheduler
Spring Boot 2 提供了spring-boot-starter-quartz 集成Quartz scheduler框架。定时任务的 配置支持内存配置和存储在 JDBC 数据库中的配置。关于 Spring Boot 集成Quartz scheduler开发定时任务的内容我们将在后面的章节中详细介绍。
Spring Data Web 配置
Spring Boot提供了一个新的 spring.data.web 配置命名空间, 配置分页和排序(paging and sorting)更加简洁方便。
Json starter
提供了一个新的 spring-boot-starter-json 启动器,它不仅提供了 jackson-databind ,同时提供了非常实用的模块:基于Java的8: jackson-datatype-jdk8, jackson-datatype-jsr310 和jackson-module-parameter-names模块。
Thymeleaf starter
Thymeleaf 启动器中现在包含了开箱即用的 thymeleaf-extras-java8time 。
InfluxDB
如果InfluxDB java客户端和spring.influx.url被设置, Spring Boot将会自动配置一个InfluxDB客户端, 同时也支持凭证(credentials)。
JdbcTemplate
现在可以通过spring.jdbc.template命名空间进行定制Spring Boot自动配置的JdbcTemplate。 此外,自动配置的NamedParameterJdbcTemplate在幕后重用了JdbcTemplate。
jOOQ
Spring Boot根据DataSource自动检测jOOQ方言(类似于JPA方言)。
此外,还引入了@JooqTest来简化jOOQ的测试。
@DataRedisTest
提供一个支持Redis分片的注解(slice annotation)。
Mongo client 定制
通过自定义 MongoClientSettingsBuilderCustomizer这个bean, 来定制Mongo client。
Cassandra
配置项spring.data.cassandra 支持pooling options.
Kafka listener types
现在可以通过配置spring.kafka.listener.type来创建一个批处理侦听器(batch listener) 来同时使用一个ConsumerRecord列表:
spring.kafka.listener.type=batch
Web filters 初始化
在所有支持过滤器(filters)的容器上,Web过滤器现在支持优先初始化。

Auto-configuration report
不满足条件的类(Unconditional)现在包含在自动配置执行器端点(Actuator endpoint)的响应中。
Reset logger 操作
Loggers endpoint端点允许将logger level级别重置为默认值。

Spring Boot 2.0.0 M3 Release Notes
Maven plugin properties
Spring Boot 的 Maven插件现在支持以spring-boot.* 前缀开始的属性配置,这个前缀是为了保持一致性并避免与其他插件命名空间发生冲突。例如,使用命令行启用dev配置文件:
mvn spring-boot:run -Dspring-boot.run.profiles=dev
Devtools Remote Debug Tunnel
已经从Devtools中删除了通过HTTP通道进行远程调试(tunnelling remote debugging)的支持。
Jetty
与Tomcat和Undertow保持一致,Jetty现在支持对所有 HTTP请求的响应,而不仅仅是GET请求。
Reactive server customisation
在配置Reactive Web Server时要调用Jetty,Tomcat和Undertow的定制类(Customizers)。
Kafka
消费者和生产者特定的属性现在可以通过环境进行配置。关于 Spring Boot 集成 Kafka 开发的内容我们将会在后面章节中详细介绍。
WebTestClient codecs
现在,自动配置的WebTestClient的定制方式与WebClient相同。关于WebTestClient的使用我们将在后面的 Spring Boot 应用的测试章节中详细介绍。
Spring Session
Spring Session Repository 的过滤器Filter的顺序(order) 和 指派类型(dispatcher type)可以分别通过使用 application.properties环境配置中的
spring.session.servlet.filter-order

spring.session.servlet.filter-dispatcher-types
属性进行配置。

Spring Boot 2.0.0 M4 Release Notes
Actuator
Spring Boot 2.0为Actuator执行器带来了重要变化:现在支持Spring MVC,Spring WebFlux和Jersey。
Build
执行器Actuator的代码分为两个模块:现有的spring-boot-actuator和新的spring-boot-actuator-autoconfigure。 如果您使用之前的模块spring-boot-actuator导入执行器,现在请考虑使用spring-boot-starter-actuator启动器。
面向用户的更改
面向用户的重要更改包括:
•Spring Boot的metrics度量标准已经被Micrometer 和dimensional metrics的自动配置所取代。 (关于Micrometer的内容可参考:http://micrometer.io/docs
•端点路径不再可配置(i.e. endpoints.<id>.path)
•简化超媒体(Hypermedia)的支持
•现在使用基于正则表达式(Regex-based)的查询参数匹配,不再用路径变量
• /env, / flyway, / liquibase, / health数据结构的变化。
Spring Boot 2.0中的 Actuators 的一览表如下图所示:

关于 Spring Boot Actuator 的相关内容我们将在后面的章节中详细介绍。
关于如何迁移老版本的endpoints到 Spring Boot 2.0版本, 可参考官方文档:https://github.com/spring-projects/spring-boot/wiki/Migrating-a-custom-Actuator-endpoint-to-Spring-Boot-2

Security
另一个重要的变化是, Actuator不再单独支持的security安全自动配置: management.security.enabled已不复存在。同时 endpoints.default.web.enabled 在默认情况下都是禁用的, 防止暴露敏感信息。每个端点的敏感标志也在安全配置中变得更加明确。启用web端点动器可以设置endpoints.default.web.enabled = true。
Configuration
下面的这些配置元素更新了:
• endpoints.cors 迁移到 management.endpoints.cors
• endpoints.jmx 迁移到 management.endpoints.jmx
• endpoints.health.mapping 迁移到 management.health.status.http-mapping
Security
Security 自动配置已经完全不同与旧版本中,详情参考: https://spring.io/blog/2017/09/15/security-changes-in-spring-boot-2-0-m4

Jolokia
Jolokia 不再放入 endpoint 中,而是迁移到了 management.jolokia.* 配置中。如果想要启用Jolokia, 配置 management.jolokia.enabled=true 即可。
Jolokia是一个利用JSON通过Http实现JMX远程管理的开源项目。具有快速、简单等特点。除了支持基本的JMX操作之外,它还提供一些独特的特性来增强JMX远程管理如:批量请求,细粒度安全策略等。Jolokia的项目主页是:https://jolokia.org/
Build
Spring Boot 现在基于Gradle 4.x 构建。
Database Migration
Liquibase 和Flyway 配置keys 已经迁移到 spring.* 命名空间,分别是: spring.liquibase 和spring.flyway 。如果使用Flyway或Liquibase管理数据源,并且使用嵌入式数据库,Spring Boot现在将自动关闭Hibernate的自动DDL功能。

关于 Spring Boot 集成使用Liquibase 和Flyway的相关内容,我们将在后面的章节中详细介绍。

Liquibase是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在XML文件中,便于版本控制。Liquibase项目主页:https://github.com/liquibase/liquibase

Flyway 是独立于数据库的应用,用来管理并跟踪数据库变更的数据库版本(官网的宣传语是:Version control for your database, Robust schema evolution across all environments, With ease, pleasure and plain SQL.),功能上像是git、svn这种代码版本控制。支持数据库有 Oracle, SQL Server, SQL Azure, DB2, DB2 z/OS, MySQL (including Amazon RDS), MariaDB, Google Cloud SQL, PostgreSQL (including Amazon RDS and Heroku), Redshift, Vertica, H2, Hsql, Derby, SQLite, SAP HANA, solidDB, Sybase ASE and Phoenix等。Flyway 项目主页: http://flywaydb.org/

Auto-configuration ordering
@AutoConfigureOrder的默认值从 Ordered.LOWEST_PRECEDENCE 改成 0.
Database initializer
Spring Batch、Spring Integration、Spring Session和Quartz的数据库初始化只有在使用和嵌入数据库时才会发生。例如,如果您希望始终执行Spring Batch initialization,您可以设置: spring.batch.initialize-schema=always.
自动配置的测试工具 test utilities
一个新的ApplicationContextRunner测试工具使得测试您的自动配置变得非常容易。新的测试套件都迁移到了这个新模型上。
Java 9 支持
该版本已经开始致力于Java 9的支持,还没有得到完全的支持。
Spring Boot 2.0.0 M5 Release Notes
Surefire默认值
自定义 include/exclude 模式与最新的Surefire默认值一致。
Redis
现在的spring-boot-starter-redis 中,Redis的driver由 Lettuce 取代了 Jedis 。仍然支持Jedis,使用方法是排除 io.lettuce:lettuce-core 依赖,同时添加 redis.clients:jedis依赖.
OAuth 2.0 支持
Spring Security OAuth 项目正在迁移到 Spring Security中。目前已经支持OAuth 2.0 Client。如果您只需要OAuth 2.0客户端支持,您可以使用Spring Boot 2.0提供的自动配置。同时还将继续支持springboot 1.5。
Mockito 1.x
Mockito 1.x 不再支持 @MockBean 和 @SpyBean注解。如果您没有使用 spring-boot-starter-test 管理您的依赖,您需要手动升级到Mockito 2.x.

配置Gradle bootRun
BootRun任务现在提供了配置应用程序参数(args)和JVM参数(jvmArgs)的属性。更高级的配置可以通过execSpec获得。有关更多细节,请参阅Gradle插件的文档:https://docs.spring.io/spring-boot/docs/2.0.0.M5/gradle-plugin/reference/html/#running-your-application
更新项目结构和CI
Spring Boot现在使用concourse.ci用于持续集成和发布。项目POM文件也进行了重组,使其更简单。这些更改对大多数用户应该是透明的。
Java 9 支持
除了少数确定的案例外,master 在本地基于Java 9构建通过。如果您想使用Java 9运行Spring Boot应用程序,可以参考:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-with-Java-9
Micrometer 1.0.0-rc.2 支持
Micrometer提供的度量支持将继续发展。这个版本建立Micrometer 1.0.0-rc2上。
Spring Framework 5.0 GA
Spring Boot的这个里程碑是第一个包含Spring Framework 5.0的GA发布的里程碑。往后核心Spring框架API 将保持稳定。
JSON-B 支持
除了Jackson和Gson之外,我们现在还支持JSON绑定的JSON-B。
JSON测试也通过新的JsonbTester类进行了新支持。
Session Endpoint
Spring Session用户现在可以/application/sessions Actuator Endpoint进行查找和删除会话Session。

Spring Boot 2.0.0 M6 Release Notes

Actuator 配置变化
管理服务器(Management Server)相关的属性从 management.* 变更为 management.server.* 。
另外 management.server.context-path配置跟 server.context-path 意义等同(仅当设置了 management.server.port的时候才有效). 另外,您还可以用一个新的、独立的属性来设置管理端点的基本路径: management.endpoints.web.base-path.
例如, 您设置了
management.server.context-path=/management
management.endpoints.web.base-path=/application
您将通过路径 /management/application/health 来访问到应用的健康信息端点。
spring.config.location
spring.config.location: 它以前将一个location添加到默认值列表中,现在它会替换掉默认location。如果您依赖于以前处理的方式,现在应该使用spring.config .additional- location。

隐式open-in-view的消息
从现在开始,不显式启用spring.jpa.open-in-view的应用程序,您将在启动期间收到警告消息。此消息确保您知晓在视图渲染(view rendering)期间可执行的数据库查询(database queries)。
Gradle 构建中的 mainClassName 配置
现在BootRun, BootJar和BootWar都将使用 mainClassName 来配置应用程序的入口主类。 与 Gradle 自己的application plugin 保持一致。
ConfigurationProperties validation
现在可使用@Validated注解来校验您的 @ConfigurationProperties 标注的对象。
DataSource 初始化
数据源(DataSource )初始化现在只对嵌入式数据源启用,并且在生产环境中关闭。新的
spring.datasource.initialization-mode
取代了旧的
spring.datasource.initialize
并提供了更多的配置项。
Spring Mobile
Spring Mobile中的自动配置和依赖管理被移除。
在Spring WebFlux中支持的错误约定

弹簧引导现在支持同样的错误与WebFlux约定与MVC一样:默认视图和JSON响应错误,自定义的错误观点,和更多…看看专用部分的参考文档。
Spring WebFlux中的错误约定Error conventions 支持
Spring Boot 现在支持WebFlux和 MVC使用统一的一套错误约定: 默认视图和JSON响应错误,自定义的错误视图等。更多关于Spring WebFlux的错误处理(Error Handling)可参考文档:https://docs.spring.io/spring-boot/docs/2.0.0.M6/reference/html/boot-features-developing-web-applications.html#boot-features-webflux-error-handling
TLS 配置和HTTP/2 支持
现在可以通过属性server.ssl.* 来配置WebFlux 应用的 SSL功能。同时支持所有可用的 Web Servers: Tomcat, Jetty, Undertow 以及Reactor Netty等.
配置server.http2.enabled属性,可以在您的MVC 或者 WebFlux应用中来启用HTTP/2支持,目前支持Tomcat 和Undertow。
配置JPA 资源映射
如果您正在扩展Spring Boot的JPA配置来注册映射资源(mapping resources),那么现在可以通过spring.jpa.mapping-resources属性来直接配置。

@KafkaListener 的 @SendTo支持
使用自动配置的Kafka侦听器(listeners)现在支持@SendTo注解。
数据源的指标(Metrics)
默认情况下,所有可用的数据源都将被检测(instrumented)。
Kotlin extension
Spring Boot现在有一个Kotlin 扩展函数runApplication,我们可以直接在 main 函数中的直接写出下面的代码:

package com.easypringboot.demo

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

@SpringBootApplication
class DemoApplication

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

Spring Boot 2.0.0 M7 Release Notes
Actuator configuration变化
根据社区反馈,默认的 management.endpoints.web.base-path配置值从 "/application" 变更为 "/actuator";
配置属性 endpoints.* 迁移到 management.endpoint.* 命名空间下。
Health vs. Status
状态status端点被移除,取而代之的是一个独特的健康端点,可以显示状态或全部细节。health端点现在是默认暴露的(只显示状态)。可以使用management.endpoint.health.show-details 属性来配置显示应用程序的健康详情:

management.endpoint.health.show-details=true

Actuator endpoint exposures
端点曝光被简化了。每种技术都提供了一个公开和排除属性,而不是每个端点和每个技术的启用标志。例如,要公开所有web端点,但是env端点:

简化了暴露Endpoint的配置。各个端点属性中同时提供了expose 和exclude 属性。例如,要暴露出所有web端点,但是不暴露env端点,配置如下:

management.endpoints.web.expose=*
management.endpoints.web.exclude=env

在这个文档中详细介绍了 Actuator 的功能更新:https://docs.spring.io/spring-boot/docs/2.0.0.M7/reference/htmlsingle/#production-ready
同时这个文档中有新的 Actuator API 介绍:https://docs.spring.io/spring-boot/docs/2.0.0.M7/actuator-api/html/

Auto-configuration report
由于“自动配置报告”定义了多于自动配置的结果,因此它被重新命名为“条件评估报告”(Conditions evaluation report)。
端点 /actuator/auto-config 中的信息现在可以在端点 /actuator/conditions 中找到。
Jackson serialization
配置项 spring.jackson.serialization.write-dates-as-timestamps 默认值变为false, 意思是所有JSR310 日期类型都会被序列化成ISO-8601 字符串。
基于Kotlin来使用 Jackson
由于没有预料到的副作用,jackson -module- kotlin已经从spring-boot-starter-json中删除了。如果您正在Kotlin项目中使用Jackson,那么您现在必须手动添加
com.fasterxml.jackson.module:jackson-module-kotlin
这个依赖。
Spring Data repositories 支持
支持命令式(imperative)和响应式(reactive)的Spring Data repositories 。可以通过配置属性
spring.data.<store>.type
来实现,默认值是auto。
Commons Digester 依赖管理
这个依赖commons-digester 不再自动配置,你需要自己定义 version 。
Job command line runner order
CommandLineRunner执行优先级设置为0。
Spring Social
删除了对Spring Social 的自动配置和依赖管理功能。
配置Gradle的 bootRun 任务
基于用户的反馈,BootRun任务再次成为Gradle的JavaExec 任务的子类。它的配置方式与其他JavaExec任务相同。
条件注解 Bean增量记录
当使用devtools的应用程序由于更改而重新启动时,将记录一个条件评估报告的增量。这个delta定义了哪些条件已经更改,以及对应用程序的影响。例如,如果您将自己的ObjectMapper添加到一个使用自动配置版本的应用程序中,那么以下内容将被记录:

2017-11-24 14:45:57.723  INFO 63896 --- [  restartedMain] .ConditionEvaluationDeltaLoggingListener : Condition evaluation delta:

==========================
CONDITION EVALUATION DELTA
==========================

Positive matches:
-----------------
    None
Negative matches:
-----------------
   JacksonAutoConfiguration.JacksonObjectMapperConfiguration#jacksonObjectMapper:
      Did not match:
         - @ConditionalOnMissingBean (types: com.fasterxml.jackson.databind.ObjectMapper; SearchStrategy: all) found beans of type 'com.fasterxml.jackson.databind.ObjectMapper' objectMapper (OnBeanCondition)


Exclusions:
-----------

    None


Unconditional classes:
----------------------

    None
Scheduled tasks actuator endpoint

当启用定时任务功能(i.e. @EnableScheduling),我们现在提供了一个新的端点endpoint
/actuator/scheduledtasks
来展示cron, fixed delay 以及 fixed rate 定时任务的信息。
时间配置属性
许多配置属性,比如server.session.cookie.max- age的值为秒(或毫秒,取决于属性)来配置时间。这些属性已经转换为Java持续时间Duration 类型,因此您可以配置

server.session.cookie.max-age=2d

来表示“两天”。注意,现有的、非后缀的值将按预期继续工作。
自动配置模板欢迎页面
Spring Boot支持静态和模板欢迎页面。它首先在配置的静态资源目录查找index.html文件。如果没找到静态index.html文件,它会去视图模板下面找index 模板。只要找到了一个就会自动被用作应用程序的欢迎页面。
优化Redis缓存自动配置
默认的缓存Cache 配置可以使用属性: spring.cache.redis.* 来配置。
支持自定义Hibernate命名策略
对于高级场景中,现在可以在上下文(context)中使用常规bean来自定义ImplicitNamingStrategy或PhysicalNamingStrategy 。
Data Couchbase Reactive 支持
支持使用属性
spring-boot-starter-data-couchbase-reactive
来配置Spring Data reactive repositories 的 Couchbase支持。
Couchbase 是一个强大的NoSQL 数据平台。Couchbase Server是由早先的CouchDB(https://github.com/apache/couchdb)发展而来, 继承了Memcached的技术特性, 是一个开源的、分布式的、面向文档(document-oriented) 的NoSQL 数据库。Couchbase 还有一个非常专业的 web 管理界面,并且支持通过 RESTful API 管理。项目空间:https://github.com/couchbase
TestRestTemplate Kotlin 扩展(extensions)
提供一个TestRestTemplate 的Kotlin扩展类TestRestTemplateExtensions.kt,带来更好的开发体验。
启动日志记录Context path
在使用嵌入式容器时,将在HTTP端口后面记录上下文路径。类似的这样:
Tomcat started on port(s): 8080 (http) with context path '/foo'
Testing 功能增强
当使用注解 @WebMvcTest 和@WebFluxTest时将自动扫描Converter 和GenericConverter beans。

关于 Spring Boot 2.0的详细的功能特性,可以参考:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Release-Notes
如果您想从 Spring Boot 1.5版本升级到 Spring Boot 2.0版本,可参考指南:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,898评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,401评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,058评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,539评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,382评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,319评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,706评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,370评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,664评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,715评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,476评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,326评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,730评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,003评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,275评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,683评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,877评论 2 335

推荐阅读更多精彩内容