新的和值得注意的
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中的许多不一致问题。
新Binder
API也可以@ConfigurationProperties
直接在您自己的代码中使用。例如,下面将结合到List
的PersonName
对象:
列表< 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格式中指定的持续时间,或作为一个简单的字符串(例如10m
10分钟,支持其他单位的)。现有属性已更改为始终使用Duration
。例如,会话超时可以配置为180秒,application.properties
如下所示:
服务器。servlet 。会议。超时= 180秒
该@DurationUnit
注释通过设置如果没有指定所使用的单元确保向后兼容性。例如,Spring Boot 1.5中预期秒数的属性现在必须@DurationUnit(ChronoUnit.SECONDS)
确保一个简单的值,例如10
实际使用10s
。
定界字符串转换允许您将简单绑定String
到Collection
或Array
不必在逗号上拆分。例如,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灵活配置
如果仅提供自定义url
或user
属性,则Flyway和Liquibase的自动配置现在重用标准数据源属性而不是忽略它们。这允许您DataSource
仅使用所需信息为迁移目的创建自定义。
Hibernate
现在支持自定义Hibernate命名策略。对于高级方案,您现在可以在上下文中定义ImplicitNamingStrategy
或PhysicalNamingStrategy
用作常规bean。
现在也可以通过暴露HibernatePropertiesCustomizer
bean 来定制Hibernate以更细粒度的方式使用的属性。
MongoDB客户端自定义
现在可以通过定义类型的bean将高级自定义应用于Spring Boot自动配置的Mongo客户端MongoClientSettingsBuilderCustomizer
。
Redis
现在可以使用spring.cache.redis.*
属性配置Redis的缓存默认值。
Web
除了上面提到的WebFlux和WebFlux.fn支持之外,还进行了以下改进以帮助开发Web应用程序。
上下文路径记录
使用嵌入式容器时,应用程序启动时会在HTTP端口旁记录上下文路径。举个例子,嵌入式Tomcat现在看起来像这样:
<pre style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin-bottom: 16px; margin-top: 0px; word-wrap: normal; background-color: rgb(246, 248, 250); border-radius: 3px; line-height: 1.45; overflow: auto; padding: 16px;">Tomcat从端口开始:8080(http),带有上下文路径'/ foo'</pre>
Web过滤器初始化
现在,Web过滤器已在所有受支持的容器上急切地初始化。
Thymeleaf
Thymeleaf启动器现在包括thymeleaf-extras-java8time
为javax.time
类型提供支持。
JSON支持
一个新的spring-boot-starter-json
启动器收集必要的位来读写JSON。它不仅提供了jackson-databind
与Java8工作时,也是有用的模块:jackson-datatype-jdk8
,jackson-datatype-jsr310
和jackson-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的存储。所有JobDetail
,Calendar
并Trigger
从你的Spring应用程序上下文豆将自动注册Scheduler
。
有关更多详细信息,请阅读参考文档的新“Quartz Scheduler”部分。
测试
对Spring Boot 2.0中提供的测试支持进行了一些补充和调整:
@WebFluxTest
添加了一个新的注释来支持WebFlux应用程序的“切片”测试。Converter
和GenericConverter
豆类现在自动扫描@WebMvcTest
和@WebFluxTest
。@AutoConfigureWebTestClient
添加了一个注释以提供WebTestClient
要使用的测试的bean。注释会自动应用于@WebFluxTest
测试。添加了一个新的
ApplicationContextRunner
测试实用程序,可以非常轻松地测试您的自动配置。我们已将大部分内部测试套件移至此新模型。有关详细信息,请参阅更新文档
杂
除了上面列出的变化之外,还有许多小的调整和改进,包括:
@ConditionalOnBean
现在,在确定是否满足条件时,使用逻辑AND
而不是逻辑OR
。无条件类现在包含在自动配置报告中。
该
spring
CLI应用程序现在包括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横幅。
请参阅此项目以获取示例。