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

《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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java学习

Spring学习笔记1_Spring的概述

本章目录 Spring学习笔记1_Spring的概述 1.Spring介绍 2.Spring作用 3.Spring起源 4.Spring体系结构 5.Spri...

3066
来自专栏Java Web

Spring MVC【入门】就这一篇!

MVC 设计概述 在早期 Java Web 的开发中,统一把显示层、控制层、数据层的操作全部交给 JSP 或者 JavaBean 来进行处理,我们称之为 Mod...

3958
来自专栏清晨我上码

第四节 微服务OTRS SpringCould使用

1.1. 启动一个服务注册中心,只需要一个注解@EnableEurekaServer,这个注解需要在springboot工程的启动application类上...

1033
来自专栏Danny的专栏

【EJB学习笔记】——EJB开发环境搭建(Eclipse集成JBoss)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

1423
来自专栏ImportSource

Spring Boot 2.0 新特性和发展方向

以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8以上, Java 6 和 7 不再支持。 内嵌容器包结构调整 为了支持react...

4389
来自专栏用户2442861的专栏

通过Spring Boot三分钟创建Spring Web项目

作者:David 链接:https://zhuanlan.zhihu.com/p/20637937 来源:知乎 著作权归作者所有。商业转载请联系作者获得授...

772
来自专栏全栈架构

Spring Boot 与 Kotlin使用Freemarker模板引擎渲染web视图

Web相关的介绍这里就不多阐述,还没了解的请移步《Spring Boot 与 Kotlin 使用Thymeleaf模板引擎渲染web视图》

982
来自专栏王磊的博客

Spring Boot (七)MyBatis代码自动生成和辅助插件

MyBatis Generator 是MyBatis 官方出品的一款,用来自动生成MyBatis的 mapper、dao、entity 的框架,让我们省去规律性...

2551
来自专栏Java后端技术

context:component-scan标签的use-default-filters属性的作用以及原理分析

  我们在Spring+SpringMVC+Mybatis的集成开发中,经常会遇到事务配置不起作用等问题,那么本文就来分析下出现这种问题可能的原因以及解决方式。

904
来自专栏玩转JavaEE

使用Spring Cloud搭建服务注册中心

我们在之前的博客中已经介绍过阿里的分布式服务框架dubbo【Linux上安装Zookeeper以及一些注意事项】【一个简单的案例带你入门Dubbo分布式框架】,...

1.9K4

扫码关注云+社区

领取腾讯云代金券