Spring Boot 2.0 新特性

旧街凉风 提交于 2020-10-29 21:00:46

这是一篇总结文章,主要收集 Spring Boot 2.0 相对于 Spring Boot 1.x 的新特性,本章节并不提供实践性质的源代码。在 Spring Boot 系列文章中会持续退出实践章节。

从 Spring Boot 1.5 开始升级

如果要从 Spring Boot 1.5 升级到 Spring Boot 2.0 可能要花费一些实际,可以参考 官方迁移指南中文版本迁移指南

如果是更老的版本,请参考Upgrading from Spring Boot 1.4 迁移指南

当然,你可以从谷歌或百度搜索到中文翻译版本。

本文主要来源于 spring-boot-2.0-release-notes

基于 Java 8 支持 Java 9

Spring Boot 2.0 要求 Java 的最低版本是 Java 8,从 Spring Boot 2.0 版本开始许多 APIs 使用了 Java 8 的特性。当然你也可以选择 Java 9。

Spring Boot 2.0 不在支持 Java 6 和 Java 7。

第三方依赖库

首先 Spring Boot 2.0 是基于 Spring 5 的。那么所有的 Spring 5 的新特性 在 Spring Boot 2.0 中都有体现。

其中主要的依赖变更包括

  1. Tomcat 8.5
  2. Flyway 5
  3. Hibernate 5.2
  4. Thymeleaf 3

Reactive Spring

Spring Boot 2.0 支持响应式编程

Spring WebFlux & WebFlux.fn

Spring Boot 2.0 提供基于注释的 Spring WebFlux 以及 WebFlux.fn的自动装配。在启动的时候,使用 spring-boot-starter-webflux 来启动项目。

Reactive Spring Data

在底层技术支持的情况下,Spring Data也为reactive applications提供支持。目前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。为WebFlux程序提供Spring Security的自动配置。

使用 WebFlux 的 Spring Security 访问规则可以通过 ·SecurityWebFilterChain· 来自动配置。如果你之前使用过Spring MVC,将会感到非常熟悉。有关更多详细信息,请参阅Spring Boot参考文档Spring Security文档

Embedded Netty Server 嵌入式 Netty 服务器

由于WebFlux不依赖于Servlet API,现在首次支持Netty作为嵌入式Server。该·spring-boot-starter-webflux· starter POM 将引入 Netty 4.1 和 Ractor Netty。

HTTP/2 支持

现在Tomcat,Undertow和Jetty都已经提供对HTTP / 2的支持。但是这部分取决于所选的Web服务器和应用程序环境(因为JDK 8不支持该协议)。

Configuration Property Binding 配置属性的绑定

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

通过新的 Binder API 可以在您的代码中直接使用 @ConfigurationProperties 。例如,下面的示例将实现绑定PersonName到List对象:

List<PersonName> people = Binder.get(environment)
    .bind("my.property", Bindable.listOf(PersonName.class))
    .orElseThrow(IllegalStateException::new);

在YAML中配置源可以像这样表示:

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

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

Property Origins 配置起源

YAML 文件和 Properties 文件现在都包含 Origin 信息,从而可帮助更好的跟踪项目加载情况。有一些 Spring Boot 特性可以利用这些信息,并在适当时用于展示。

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

另一个例子是env 可用 actuator端点时其包括的origin信息。下面的代码显示的是通过 spring.security.user.name属性,得知application.properties文件来自jar包下行1,列27。

{
  "name": "applicationConfig: [classpath:/application.properties]",
  "properties": {
    "spring.security.user.name": {
      "value": "user",
      "origin": "class path resource [application.properties]:1:27"
    }
  }
}

Converter Support 转换器支持

使用新的 ApplicationConversionService 类的绑定器,提供了一些对属性绑定特别有用的额外转换器。最引人注目的是 Duration 和分隔字符串类型的转换器。

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项目的最新版本中也对Kotlin做了支持(如Spring Framework,Spring Data和Reactor)。

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

Actuator Improvements

对Spring Boot 2.0的许多actuator 端口进行了改进。所有HTTP actuator 端口现在都发布在/actuator路径下,并且改进了生成的JSON payloads。

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

Actuator JSON

Spring Boot 2.0改进了从许多端点返回的JSON payloads信息。

现在许多端口都有能更精确地反映底层数据的JSON信息。例如,/actuator/conditions端口(在Spring Boot 1.5中是/autoconfig)现在将有一个顶级contexts key来将结果分组。

现在可以使用Spring REST Docs生成的REST API 文档,并随每个版本发布。

Jersey and WebFlux Support

除了支持Spring MVC和JMX,您现在可以在开发Jersey或WebFlux应用程序时访问actuator端口。 Jersey通过自定义JerseyResource ,WebFlux使用自定义 HandlerMapping来支持。

Hypermedia links

/actuator 端口现在为所有的活动端口提供了一个HAL格式的超媒体链接(即使在classpath下没有Spring HATEOAS)。

Actuator @Endpoints

为了支持Spring MVC,JMX,WebFlux和Jersey,我们为actuato端口开发了一种新的编程模型。该@Endpoint注解可以与 @ReadOperation@WriteOperation@DeleteOperation 组合使用,来定制一个对技术无感知的开发端口。

您还可以使用 @EndpointWebExtension@EndpointJmxExtension 为端口编写特定的技术扩展功能。

Micrometer

Spring Boot 2.0不再提供自己的metrics API。相反,我们依靠micrometer.io来满足所有应用程序监控需求。

Metrics可以输出到各种系统,如Atlas,Datadog,Ganglia,Graphite,Influx,JMX,New Relic,Prometheus,SignalFx,StatsD和Wavefront等。另外还可以使用简单的in-memory metrics。

支持JVM指标(包括CPU,内存,线程和GC),Logback,Tomcat,Spring MVC&RestTemplate。

Data Support

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

HikariCP

Spring Boot 2.0 中的默认的数据库连接池组件已从Tomcat连接池切换到HikariCP。Hakari提供了更卓越的性能,不过也有许多用户更喜欢 Tomcat Pool。

Initialization

数据库初始化逻辑在 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 使用自定义的 spring.jdbc.template 属性自动配置 JdbcTemplate

Spring Data Web Configuration

pring Boot公开了一个新的 spring.data.web 配置 namespace 来很容易的配置分页和排序。

Influx DB

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

Flyway/Liquibase Flexible Configuration

Hibernate

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

现在也可以通过 HibernatePropertiesCustomizerbean Bean 来更加细致地定制 Hibernate 使用的一些属性。

MongoDB Client Customization

现在可以通过定义一个 MongoClientSettingsBuilderCustomizer 类型的 bean,来定制支持Spring Boot自动配置的Mongo Client。

Redis

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

Web

Context Path Logging 上下文路径记录

当使用嵌入式容器时,当您的应用程序启动时,上下文路径将与HTTP端口一起打印出来。例如,embedded Tomcat现在看起来像这样:

Tomcat started on port(s): 8080 (http) with context path '/foo'

Web Filter Initialization Web过滤器初始化

Web filters 现在在所有容器内都支持 eagerly 初始化。

Thymeleaf

Thymeleaf starter 现在包含了支持javax.time 类型的thymeleaf-extras-java8time 。

JSON Support

新的 spring-boot-starter-json starter gathers必要的字节来读写 JSON。它不仅提供了 jackson-databind,同时也为java8环境提供了很多非常有用的模块:jackson-datatype-jdk8, jackson-datatype-jsr310jackson-module-parameter-names。这个新的 starter 现在被用于之前定义 jackson-databind 的地方。

Quartz

自动配置现在也支持 Quartz Scheduler。我们还添加了新的 spring-boot-starter-quartz starter POM。

您可以使用内存的 JobStores 或完整的基于JDBC存储的 JobDetail。所有 JobDetailCalendarTrigger beans将会通过 Scheduler 自动注册。

如果您更喜欢除了 Jackson 以外的产品,Spring Boot 2.0 对GSON支持已经大大提高。我们还引入了对JSON-B的支持(包括JSON-B测试支持)。

Testing

Miscellaneous 其他

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

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

Unconditional类现在包含在自动配置报表中。

spring CLI应用程序现在包含可用于创建Spring Security的兼容散列密码的encodepassword command。

计划任务(i.e. ``@EnableScheduling) 可以通过scheduledtasks`actuator 端口来进行review。

loggers actuator 端口现在允许重新设置一个日志级别作为它的默认值。

使用 Spring Session 的用户现在可以通过 sessions actuator 端口查看和删除 sessions。

Animated ASCII Art

最后,为了好玩,Spring Boot 2.0现在支持动画GIF横幅。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!