SpringBoot2.x版本新特性说明

新的和值得注意的

Java 8 Baseline和Java 9支持

Spring Boot 2.0需要Java 8作为最低版本。许多现有的API已经更新,以利用Java 8的功能,例如:接口上的默认方法,功能回调和新的API,如javax.time。如果您当前使用的是Java 7或更早版本,那么在开发Spring Boot 2.0应用程序之前,您需要升级JDK。

Spring Boot 2.0也运行良好,并且已经过JDK 9的测试。我们所有的jar都在模块系统兼容性的清单中附带自动模块名称条目。

第三方Library升级

Spring Boot 2.0构建并需要Spring Framework 5.您可能希望了解Spring Framework 5.0中可用的新功能,并在继续之前查看其升级指南。

我们已尽可能升级到其他第三方jars的最新稳定版本。此版本中的一些值得注意的依赖项升级包括:

  • Tomcat 8.5

  • Flyway 5

  • Hibernate 5.2

  • Thymeleaf 3

活跃的Spring

Spring产品组合中的许多项目现在都为开发反应式应用程序提供了一流的支持。反应式应用程序完全异步且无阻塞。它们旨在用于事件循环执行模型(而不是更传统的一个每请求线程执行模型)。Spring Framework参考文档中的“Web on Reactive Stack”部分为该主题提供了出色的入门读物。

Spring Boot 2.0通过自动配置和starter-POM完全支持反应式应用程序。Spring Boot本身的内部也在必要时进行了更新,以提供反应性的alernative(最明显的是我们的嵌入式服务器支持)。

Spring WebFlux和WebFlux.fn

Spring WebFlux是一种完全无阻塞的Spring MVC替代方案。Spring Boot为基于注释的Spring WebFlux应用程序以及提供更多功能样式API的WebFlux.fn提供自动配置。

首先,使用spring-boot-starter-webflux启动POM,它将提供由嵌入式Netty服务器支持的Spring WebFlux。有关详细信息,请参阅Spring Boot参考文档。

反应性弹簧数据

在底层技术支持的情况下,Spring Data还为响应式应用程序提供支持。目前Cassandra,MongoDB,Couchbase和Redis都有反应API支持。

Spring Boot包含针对这些技术的特殊入门级POM,可提供入门所需的一切。例如,spring-boot-starter-data-mongodb-reactive包括对响应式mongo驱动程序和项目反应器的依赖性。

反应性弹簧安全

Spring Boot 2.0可以利用Spring Security 5.0保护您的被动应用程序。只要Spring Security位于类路径上,就会为WebFlux应用程序提供自动配置。

可以通过a配置Spring Security with WebFlux的访问规则SecurityWebFilterChain。如果您以前使用Spring Security与Spring MVC,那应该会非常熟悉。有关更多详细信息,请参阅Spring Boot参考文档和Spring Security文档。

嵌入式网络服务器

由于WebFlux不依赖于Servlet API,我们现在能够首次支持Netty作为嵌入式服务器。该spring-boot-starter-webflux起动POM将拉Netty中4.1和Ractor Netty的。

注意:您只能将Netty用作响应服务器。未提供阻塞servlet API支持。

HTTP / 2支持

为Tomcat,Undertow和Jetty提供HTTP / 2支持。支持取决于所选的Web服务器和应用程序环境(因为JDK 8不支持该协议)。

有关详细信息,请参阅此“如何”部分。

配置属性绑定

用于绑定Environment属性的机制@ConfigurationProperties已经在Spring Boot 2.0中彻底改进。我们借此机会收紧了轻松绑定的规则,并修复了Spring Boot 1.x中的许多不一致问题。

BinderAPI也可以@ConfigurationProperties直接在您自己的代码中使用。例如,下面将结合到ListPersonName对象:

列表< PersonName > people =  Binder 。得到(环境)
    .bind( “ my.property ”,可绑定。 listOf(PERSONNAME 。类))
    .orElseThrow(IllegalStateException :: new);

配置源可以用YAML表示,如下所示:

my : 
  property :
  - first - name : Jane 
    last - name : Doe 
  - first - name : John 
    last - name : Doe

有关更新的绑定规则的更多信息,请参阅此Wiki页面。

属性来源

Spring Boot加载的YAML文件和属性文件现在包含的Origin信息可以帮助您跟踪项目的加载位置。有几个Spring Boot功能可以利用这些信息并在适当的时候显示它。

例如,BindException绑定失败时抛出的类是OriginProvider。这意味着可以从故障分析器中很好地显示原始信息。

另一个例子是env执行器端点,它包括可用时的原始信息。下面的代码段显示该spring.security.user.name属性来自jar中打包的文件的line 1,column :27``application.properties

{
   “ name ”:“ applicationConfig:[classpath:/application.properties] ”,
   “ properties ”:{
     “ spring.security.user.name ”:{
       “ value ”:“ user ”,
       “ origin ”:“类路径资源[application.properties]:1:27 “
    }
  }
}

转换器支持

绑定使用了一个新ApplicationConversionService类,它提供了一些额外的转换器,这些转换器对于属性绑定特别有用。最值得注意的是Duration类型和分隔字符串的转换器。

Duration转换器允许在任一ISO-8601格式中指定的持续时间,或作为一个简单的字符串(例如10m10分钟,支持其他单位的)。现有属性已更改为始终使用Duration。例如,会话超时可以配置为180秒,application.properties如下所示:

服务器。servlet 。会议。超时= 180秒

@DurationUnit注释通过设置如果没有指定所使用的单元确保向后兼容性。例如,Spring Boot 1.5中预期秒数的属性现在必须@DurationUnit(ChronoUnit.SECONDS)确保一个简单的值,例如10实际使用10s

定界字符串转换允许您将简单绑定StringCollectionArray不必在逗号上拆分。例如,LDAP base-dn属性的使用@Delimiter(Delimiter.NONE)使得LDAP DN(通常包括逗号)不会被误解释。

Gradle插件

Spring Boot的Gradle插件已经在很大程度上被重写,以实现许多重大改进。您可以在其参考和api文档中阅读有关插件功能的更多信息。

Spring Boot现在需要Gradle 4.x. 如果要升级使用Gradle的项目,请查看迁移指南。

Kotlin

Spring Boot 2.0现在包含对Kotlin 1.2.x的支持,并提供了一种runApplication功能,它提供了一种使用惯用Kotlin运行Spring Boot应用程序的方法。我们还公开并利用了其他Spring项目(如Spring Framework,Spring Data和Reactor)添加到其最新版本中的Kotlin支持。

有关更多信息,请参阅参考文档的Kotlin支持部分。

执行器改进

Spring Boot 2.0对执行器端点进行了许多改进和改进。现在,所有HTTP执行器端点都在/actuator路径下公开,并且所得到的JSON有效负载已得到改进。

我们现在也默认不暴露这么多端点。如果您要升级现有的Spring Boot 1.5应用程序,请务必查看迁移指南并特别注意该management.endpoints.web.exposure.include属性。

执行器JSON

Spring Boot 2.0改进了从许多端点返回的JSON有效负载。

现在,许多端点都具有更准确地反映基础数据的JSON。例如,/actuator/conditions端点(/autoconfig在Spring Boot 1.5中)现在有一个顶级contexts键来对结果进行分组ApplicationContext

现在还使用Spring REST Docs生成了大量REST API 文档,并随每个版本一起发布。

Jersey和WebFlux支持

除了Spring MVC和JMX支持之外,您现在可以在开发纯Jersey或WebFlux应用程序时访问执行器端点。Jersey支持是通过自定义Jersey提供的Resource,WebFlux使用自定义HandlerMapping

超媒体链接

/actuator端点现在提供了一个HAL格式的响应提供链接到所有活动端点(即使你没有春天HATEOAS在classpath)。

执行器@Endpoints

为了支持Spring MVC,JMX,WebFlux和Jersey,我们开发了一种新的执行器端点编程模型。该@Endpoint批注可以与组合使用@ReadOperation@WriteOperation@DeleteOperation制定一个技术无关的方式端点。

您还可以使用@EndpointWebExtension@EndpointJmxExtension编写端点的技术特定增强功能。有关详细信息,请参阅更新的参考文

Micrometer

Spring Boot 2.0不再附带自己的度量标准API。相反,我们依靠micrometer.io来满足所有应用程序监控需求。

千分尺包括对尺寸度量的支持,当与尺寸监视系统配对时,允许有效访问特定命名度量,并能够在其维度上向下钻取。

度量标准可以导出到各种系统,开箱即用的Spring Boot 2.0支持Atlas,Datadog,Ganglia,Graphite,Influx,JMX,New Relic,Prometheus,SignalFx,StatsD和Wavefront。此外,还可以使用简单的内存中度量标准。

集成提供了JVM指标(包括CPU,内存,线程和GC),Logback,Tomcat,Spring MVC和RestTemplate

有关更多详细信息,请参阅参考文档的更新“metrics”部分。

数据支持

此外,上面提到的“Reactive Spring Data”支持,还在Data领域进行了其他一些更新和改进。

HikariCP

Spring Boot 2.0中的默认数据库池技术已从Tomcat Pool切换到HikariCP。我们发现Hakari提供了卓越的性能,我们的许多用户比Tomcat Pool更喜欢它。

初始化

数据库初始化逻辑已在Spring Boot 2.0中合理化。Spring Batch,Spring Integration,Spring Session和Quartz的初始化现在默认情况下仅在使用和嵌入式数据库时发生。该enabled物业已被更具表现力的枚举所取代。例如,如果要始终执行Spring Batch初始化,则可以进行设置spring.batch.initialize-schema=always

如果Flyway或Liquibase正在管理您的DataSource的架构并且您正在使用嵌入式数据库,Spring Boot现在将自动关闭Hibernate的自动DDL功能。

JOOQ

Spring Boot 2.0现在可以根据DataSource自动检测jOOQ方言(类似于JPA方言所做的)。@JooqTest还引入了一个新的注释来简化测试,只需要使用jOOQ。

JdbcTemplate

JdbcTemplate那个春天开机自动配置就现在可以通过定制化的spring.jdbc.template特性。此外,NamedParameterJdbcTemplate自动配置的重用JdbcTemplate在幕后。

Spring Data Web配置

Spring Boot公开了一个新的spring.data.web配置命名空间,可以轻松配置分页和排序。

Influx DB

Spring Boot现在自动配置开源时间序列数据库InfluxDB。要启用InfluxDB支持,您需要设置spring.influx.url属性,并influxdb-java在类路径中包含。

Flyway / Liquibase灵活配置

如果仅提供自定义urluser属性,则Flyway和Liquibase的自动配置现在重用标准数据源属性而不是忽略它们。这允许您DataSource仅使用所需信息为迁移目的创建自定义。

Hibernate

现在支持自定义Hibernate命名策略。对于高级方案,您现在可以在上下文中定义ImplicitNamingStrategyPhysicalNamingStrategy用作常规bean。

现在也可以通过暴露HibernatePropertiesCustomizerbean 来定制Hibernate以更细粒度的方式使用的属性。

MongoDB客户端自定义

现在可以通过定义类型的bean将高级自定义应用于Spring Boot自动配置的Mongo客户端MongoClientSettingsBuilderCustomizer

Redis

现在可以使用spring.cache.redis.*属性配置Redis的缓存默认值。

Web

除了上面提到的WebFlux和WebFlux.fn支持之外,还进行了以下改进以帮助开发Web应用程序。

上下文路径记录

使用嵌入式容器时,应用程序启动时会在HTTP端口旁记录上下文路径。举个例子,嵌入式Tomcat现在看起来像这样:

Tomcat从端口开始:8080(http),带有上下文路径'/ foo'

Web过滤器初始化

现在,Web过滤器已在所有受支持的容器上急切地初始化。

Thymeleaf

Thymeleaf启动器现在包括thymeleaf-extras-java8timejavax.time类型提供支持。

JSON支持

一个新的spring-boot-starter-json启动器收集必要的位来读写JSON。它不仅提供了jackson-databind与Java8工作时,也是有用的模块:jackson-datatype-jdk8jackson-datatype-jsr310jackson-module-parameter-names。这个新的启动器现在用于jackson-databind以前定义的地方。

如果您更喜欢Jackson之外的其他东西,我们在Spring Boot 2.0中对GSON的支持已大大改善。我们还引入了对JSON-B的支持(包括JSON-B测试支持)。

Quartz

现在包括Quartz Scheduler的自动配置支持。我们还添加了一个新的spring-boot-starter-quartz启动器POM。

您可以使用内存JobStores或完整的基于JDBC的存储。所有JobDetailCalendarTrigger从你的Spring应用程序上下文豆将自动注册Scheduler

有关更多详细信息,请阅读参考文档的新“Quartz Scheduler”部分。

测试

对Spring Boot 2.0中提供的测试支持进行了一些补充和调整:

  • @WebFluxTest添加了一个新的注释来支持WebFlux应用程序的“切片”测试。

  • ConverterGenericConverter豆类现在自动扫描@WebMvcTest@WebFluxTest

  • @AutoConfigureWebTestClient添加了一个注释以提供WebTestClient要使用的测试的bean。注释会自动应用于@WebFluxTest测试。

  • 添加了一个新的ApplicationContextRunner测试实用程序,可以非常轻松地测试您的自动配置。我们已将大部分内部测试套件移至此新模型。有关详细信息,请参阅更新文档

除了上面列出的变化之外,还有许多小的调整和改进,包括:

  • @ConditionalOnBean现在,在确定是否满足条件时,使用逻辑AND而不是逻辑OR

  • 无条件类现在包含在自动配置报告中。

  • springCLI应用程序现在包括encodepassword可用于创建Spring Security的兼容散列密码命令。

  • @EnableScheduling可以使用scheduledtasks执行器端点来查看计划任务(即)。

  • loggers驱动器终端现在允许你重新设置一个记录器级别为它的默认。

  • Spring Session用户现在可以通过sessions执行器端点查找和删除会话。

  • spring-boot-starter-parent现在使用的基于Maven的应用程序-parameters默认使用该标志。

  • 我们的构建现在使用Concourse for CI,我们的项目POM文件已经过重构,因此它们更简单(这些更改对于大多数用户应该是透明的,但如果您发现已发布的POM有任何问题,请报告它们)。

动画ASCII艺术

最后,为了好玩,Spring Boot 2.0现在支持动画GIF横幅。
请参阅此项目以获取示例。

你可能感兴趣的:(SpringBoot2.x版本新特性说明)