Springboot2新特性概述
官方说明:
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Release-Notes
起码 JDK 8 和支持 JDK 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 下的测试,可以在 JDK 9 下正常运行,。我们所有的 jar 包都在模块系统兼容性的清单中附带了自动模块名称条目。
第三方库的升级
Spring Boot 2.0 建立在 Spring Framework 5 之上,并且需要 Spring Framework 5 。你可以通过 What’s New in Spring Framework 5.x 了解 Spring 5 的新特性。并在继续之前查看其升级指南 Upgrading to Spring Framework 5.x 。
我们已尽可能升级到其他第三方库的最新稳定版本。 本版本中一些显着的依赖性升级包括:
- Tomcat 8.5
- Flyway 5
- Hibernate 5.2
- Thymeleaf 3
Reactive Spring
Spring 产品组合中的许多项目现在都为开发反应式应用程序提供一流的支持。反应性应用程序是完全异步和非阻塞的。它们旨在用于事件循环执行模型(而不是更传统的每个请求线程执行模型)。Spring 框架参考文档中的“Web 反应堆栈”部分为这个主题提供了一个很好的入门。
Spring Boot 2.0 通过自动配置和启动器 POM 完全支持反应式应用。Spring Boot 的内部本身也在必要时进行了更新,以提供反应性的反应(最明显的是我们的嵌入式服务器支持)。
SPRING WEBFLUX&WEBFLUX.FN
Spring WebFlux 是 Spring MVC 的完全非阻塞反应式替代方案。Spring Boot 为基于注释的 Spring WebFlux 应用程序以及 WebFlux.fn 提供了自动配置,WebFlux.fn 提供了更实用的样式 API。
要开始,请添加 spring-boot-starter-webflux 到 POM,它将提供由嵌入式 Netty 服务器支持的 Spring WebFlux。
REACTIVE SPRING DATA
在底层技术支持的情况下,Spring Data 还为反应式应用程序提供支持。目前 Cassandra,MongoDB,Couchbase 和 Redis 都有反应式 API 支持。
Spring Boot 包含针对这些技术的特殊 starter-POMs,可为您提供启动所需的一切。例如,spring-boot-starter-data-mongodb-reactive包括对反应性 mongo 驱动程序和项目反应堆的依赖性。
REACTIVE SPRING SECURITY
Spring Boot 2.0 可以充分利用 Spring Security 5.0 来保护您的反应式应用程序。当 Spring Security 位于类路径中时,会为 WebFlux 应用程序提供自动配置。
使用 WebFlux 的 Spring Security 访问规则可以通过SecurityWebFilterChain。如果你之前整合过 Spring MVC 和 Spring Security,应该会感到非常熟悉。有关更多详细信息,请参阅 Spring Boot 参考文档和 Spring Security 文档。
嵌入式 NETTY 服务器
由于 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 不支持该协议)。
如何配置 HTTP/2,请参考 官方文档 。
配置属性的绑定
在 Spring Boot 2.0 中,用于绑定Environment属性的机制@ConfigurationProperties已经完全彻底修改。我们借此机会收紧了松散绑定的规则,并修复了 Spring Boot 1.x 中的许多不一致之处。
新的BinderAPI 也可以@ConfigurationProperties直接在你自己的代码之外使用。例如,下面将结合到List的PersonName对象:
List<PersonName> people = Binder.get(environment)
.bind("my.property", Bindable.listOf(PersonName.class))
.orElseThrow(IllegalStateException::new);
配置源可以像这样在 YAML 中表示:
my:
property:
- first-name: zhisheng
last-name: tian
- first-name: zhisheng
last-name: tian
有关更新绑定规则的更多信息,请参阅此Wiki页面。
配置起源
YAML 文件和被 Spring Boot 加载的 Properties 文件现在包含Origin信息,可帮助您跟踪项目从何处加载的信息。有些 Spring Boot 特性利用了这个信息可以在适当的时候展示出来。
例如,BindException绑定失败时抛出的类是一个OriginProvider。这意味着原始信息可以很好地从故障分析器中显示出来。
另一个例子是env执行器端点,当它有可用时包含了原始信息。下面的代码片断显示该spring.security.user.name属性来自 jar 包中的 application.properties 文件的第 1行,第 27 列。
{
"name": "applicationConfig: [classpath:/application.properties]",
"properties": {
"spring.security.user.name": {
"value": "user",
"origin": "class path resource [application.properties]:1:27"
}
}
}
转换器支持
Binding 利用了一个新的 ApplicationConversionService 类,它提供了一些对属性绑定特别有用的额外转换器。最引人注目的是转换器的Duration类型和分隔字符串。
该Duration转换器允许在任一 ISO-8601 格式中指定的持续时间,或作为一个简单的字符串(例如10m,10 分钟)。现有的属性已更改为始终使用Duration。该@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 应用程序的方法。我们还公开和利用了 Kotlin 对其他 Spring 项目(如Spring Framework,Spring Data 和 Reactor)已添加到其最近版本中的支持。
有关更多信息,请参阅参考文档的Kotlin支持部分。
Actuator 改进
在 Spring Boot 2.0 中 Actuator endpoints 有很大的改进。所有 HTTP Actuator endpoints 现在都在该/actuator路径下公开,并且生成的 JSON 有效负载得到了改进。
我们现在也不会在默认情况下暴露很多端点。如果您要升级现有的 Spring Boot 1.5 应用程序,请务必查看迁移指南并特别注意该management.endpoints.web.exposure.include属性。
ACTUATOR JSON
Spring Boot 2.0 改进了从许多端点返回的 JSON 有效负载。
现在许多端点都具有更精确地反映底层数据的 JSON。例如,/actuator/conditions终端(/autoconfig在Spring Boot 1.5中)现在有一个顶级contexts密钥来将结果分组ApplicationContext。
现在还使用 Spring REST Docs 生成了广泛的 REST API文档,并随每个版本发布。
JERSEY AND WEBFLUX 支持
除了支持 Spring MVC 和 JMX,您现在可以在开发 Jersey 或 WebFlux 应用程序时访问执行器端点。Jersey 支持通过自定义 Jersey 提供Resource,WebFlux 使用自定义HandlerMapping。
HYPERMEDIA LINKS
该/actuator端点现在提供了一个 HAL 格式的响应提供链接到所有活动端点(即使你没有 Spring HATEOAS 在classpath)。
ACTUATOR @ENDPOINTS
为了支持 Spring MVC,JMX,WebFlux 和 Jersey,我们为 Actuator @Endpoints 开发了一种新的编程模型。该@Endpoint注解可以与@ReadOperation,@WriteOperation 和 @DeleteOperation 组合使用开发 endpoints。
您还可以使用@EndpointWebExtension或@EndpointJmxExtension编写技术特定的增强功能到 endpoints。详细信息请参阅更新的参考文档。
MICROMETER
Spring Boot 2.0 不再提供自己的指标 API。相反,我们依靠 micrometer.io 来满足所有应用程序监视需求。
Micrometer 包括尺寸指标的支持,当与尺寸监测系统配对时,尺寸指标可以有效访问特定的指定度量标准,并且可以在其尺寸范围内向下钻取。
指标可以输出到各种系统和开箱即用的 Spring Boot 2.0,为 Atlas,Datadog,Ganglia,Graphite,Influx,JMX,New Relic,Prometheus,SignalFx,StatsD 和 Wavefront 提供支持。另外还可以使用简单的内存中度量标准。
集成随 JVM 指标(包括 CPU,内存,线程和 GC),Logback,Tomcat,Spring MVC&提供RestTemplate。
有关更多详细信息,请参阅参考文档的更新“指标”部分。
数据支持
除了上面提到的 Reactive Spring 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
Spring Boot 自动配置的 JdbcTemplate 现在可以通过 spring.jdbc.template 属性进行自定义。此外,NamedParameterJdbcTemplate自动配置的内容会重用JdbcTemplate。
SPRING DATA WEB 配置
Spring Boot 公开了一个新的spring.data.web配置名称空间,可以轻松配置分页和排序。
INFLUXDB
Spring Boot 现在自动配置开源时间序列数据库 InfluxDB。要启用 InfluxDB 支持,您需要设置一个spring.influx.url属性,并将其包含influxdb-java在您的类路径中。
FLYWAY/LIQUIBASE 灵活配置
如果仅提供自定义url或user属性,则 Flyway 和 Liquibase 的自动配置现在将重用标准数据源属性,而不是忽略它们。这使您可以创建一个自定义的数据源,仅用于所需信息的迁移。
HIBERNATE
现在支持自定义 Hibernate 命名策略。对于高级场景,现在可以在上下文中定义ImplicitNamingStrategy或PhysicalNamingStrategy使用常规 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-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 之外的其他产品,我们对 GSON 的支持在 Spring Boot 2.0 已经大大提高。我们还引入了对 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已经添加了一个注释来提供一个WebTestClientbean 供测试使用。注释会自动应用于@WebFluxTest测试。- 增加了一个新的
ApplicationContextRunner测试实用程序,可以很容易地测试您的自动配置。我们已将大部分内部测试套件移至此新模型。详细信息请参阅更新的文档。
其它
除了上面列出的变化外,还有很多小的调整和改进,包括:
@ConditionalOnBean现在在确定是否满足条件时使用逻辑AND而不是逻辑OR。- 无条件类现在包含在自动配置报告中。
- 该
springCLI 应用程序现在包括encodepassword可用于创建 Spring Security 的兼容散列密码命令。 - 计划任务(即
@EnableScheduling)可以使用scheduledtasks执行器端点进行审查。 - 该
loggers驱动器终端现在允许你重新设置一个记录器级别为它的默认。 - Spring Session 用户现在可以通过
sessions执行器端点查找和删除会话。 - 使用
spring-boot-starter-parent现在基于 Maven 的应用程序-parameters默认使用标志。 - 我们的构建现在使用 concourse 的 CI 和我们的项目 POM 文件已被重构,使它们更简单的。
动画 ASCII 艺术
最后,为了好玩,Spring Boot 2.0 现在支持动画 GIF 横幅。
Springboot2新特性概述的更多相关文章
- Servlet 3.0 新特性概述
Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若 ...
- IBM Developer:Java 9 新特性概述
Author: 成富 Date: Dec 28, 2017 Category: IBM-Developer (20) Tags: Java (27) 原文地址:https://www.ibm.com/ ...
- 11g新特性-概述 (转)
一.新特性提纲 1.数据库管理部分 ◆数据库重演(Database Replay) 这一特性可以捕捉整个数据的负载,并且传递到一个从备份或者standby数据库中创建的测试数据库上,然后重演负责以测试 ...
- Spark1.2新特性概述
http://mp.weixin.qq.com/s?__biz=MjM5NTc2MTg3Mw==&mid=201641685&idx=1&sn=1b75be3d774bb3f2 ...
- Java 8 新特性概述
Oracle 在 2014 年 3 月发布了 Java 8 正式版,该版本是一个有重大改变的版本,对 JAVA 带来了诸多新特性.其中主要的新特性涵盖:函数式接口.Lambda 表达式.集合的流式操作 ...
- SQL Server2012新特性概述
公司最近要升级数据库,SQL Server 2008R2-->2012.再开始升级之前先找了点资料分析一下2012的新特性和功能,提前预热一下. 2012中主要关注一下三个领域: 性能:改进的核 ...
- jdk7jdk8新特性概述
在oracle停止对jdk6更新,jdk8发布之后,公司终于要把生产环境更新到jdk7,下面列一下jdk7,8的可能需要关注的新特性. jdk7 G1垃圾回收 fork-join框架 二进制变量 Sw ...
- ES6新特性概述
http://es6.ruanyifeng.com/#README https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference ...
- ios9新特性概述
1.iPad的分屏功能很重要. 开发者对iPad的分屏功能感到兴奋,并认为其对苹果未来非常重要.电子邮件信息应用Hop创始人艾瑞兹·皮洛索夫(Erez Pilosof)认为,如果苹果如传闻中那样决定推 ...
随机推荐
- RabbitMQ之php-amqplib使用
PHP下使用rabbitmq可以使用第三方类库来实现 技术参考: https://rabbitmq.shujuwajue.com/tutorials_with_php/[1]Hello_World.h ...
- flutter-开发总结
### 上拉加载下拉刷新 ``` import 'dart:async'; import 'package:flutter_easyrefresh/easy_refresh.dart'; import ...
- PHP变量传值赋值和引用赋值,变量销毁
<?php $a = 100; $b = 200; var_dump($a,$b); //int(100) int(200) ?> php中,上面的代码,变量是怎么存放的呢? 上面的代码变 ...
- java 锁 Lock接口详解
一:java.util.concurrent.locks包下常用的类与接口(lock是jdk 1.5后新增的) (1)Lock和ReadWriteLock是两大锁的根接口,Lock代表实现类是Reen ...
- SpringCloud-Ribbon服务调用(三)
SpringCloud-Ribbon服务调用(三) https://www.cnblogs.com/qdhxhz/p/9568481.html 一.商品中心服务端 创建商品中心服务端:服务提供方(被调 ...
- C# 使用CsvHelper读取.csv文件
1,先到包管理器下载 安装CsvHelper. 2,创建一个与csv文件字段名称相同的类 public class SurveyInfoModel { public string DIST_CD { ...
- echarts 页面对应更改
---legrnd legend: { icon: "circle", orient: 'vertical', right: 10, top: 20, bottom: 20, da ...
- Kafka概述(一)
一.消息队列 客户端A给客户端B发送数据,若是直接发的话,客户端A给客户端B需要同步. 例如, 1) A在给B发送数据的时候,B挂掉了,此时的A是没有办法给B发送数据的: 2) A发送10M/s, ...
- BUGKU Misc 普通的二维码
下载的文件是一个bmp文件,在我的印象中bmp好像没有什么隐写技巧,有些慌张. 既然是二维码,那不妨先扫一下试一试 哈哈!就不告诉你flag在这里! 嗯,意料之中 1首先我把它放到了stegosolv ...
- 拆系数FFT
学习内容:国家集训队2016论文 - 再谈快速傅里叶变换 模板题:http://uoj.ac/problem/34 1.基本介绍 对长度为L的\(A(x),B(x)\)进行DFT,可以利用 \[ \b ...