Spring Boot 2.0详述


Spring Boot 2.0详述

  • 2018.2.22
  • 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。

Spring Boot 2.0即将发布,目前已经发布了v2.0.0 RC2版,据传说下周可能就会正式发布。Spring Boot 2.0有一系列重大的改变,下面将一一详述。

一、Spring Boot 2的基线变化

Java 8基线

Spring Boot 2.0需要Java 8以上版本为基础,它不再支持过时的Java 6和Java 7,这可以推动业内开发人员在开发基于Spring Framework的应用时能够充分利用Java 8/9提供的新特性。

支持Java 9

Spring Boot 2.0完全支持Java 9,并且提供了一个专门的网页来汇集Spring Boot with Java 9的相关知识和技巧,具体见:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-with-Java-9

Spring Framework 5.0

Spring Boot 2.0建立在Spring Framework 5.0之上。尽管Spring框架v5.0自2017年9月发布,但到目前为止,大多数基于Spring框架的项目都没有使用它。估计在Spring Boot 2.0GA版发布后,能快速推动Spring框架v5.0的使用吧。Spring框架v5.0引入了一些很好的改进,其中最值得注意的新特性之一就是它广泛支持构建响应式应用程序。

二、内嵌的Servlet容器

Spring Boot 2.0可以让应用程序内嵌Servlet容器,目前主要提供了三种Servlet容器,包括:Jetty、Tomcat、Undertow。其中,Jetty容器是9.4以上版本;Tomcat容器是8.5以上版本。

TLS配置

可以使用server.ssl.*配置属性为WebFlux应用程序配置SSL,并且这种配置方式对Tomcat、Jetty、Undertow和Reactor Netty等应用服务器均有效。

支持HTTP/2

Spring Boot 2.0应用程序还可以通过server.http2.enabled设置让MVC或WebFlux应用程序能够使用HTTP/2通信协议,并且这种配置方式对Tomcat、Jetty、Undertow应用服务器均有效。具体则依赖于选择的Web服务器和应用程序环境,因为HTTP/2协议不受JDK 8开箱即用的支持。

三、构建Build

Maven

Maven项目默认使用-parameters编译器标志进行编译。

Gradle

Spring Boot 2.0需要Gradle 4.x以上版本。Spring Boot的Gradle插件重写了大量内容,实现了许多重大改进。具体可以阅读:https://docs.spring.io/spring-boot/docs/2.0.0.BUILD-SNAPSHOT/gradle-plugin/reference

配置Gradle bootRun

BootRun任务提供了用于配置应用程序参数(args)和JVM参数(jvmArgs)的属性,以及通过execSpec提供了更高级的配置。详细情况可以阅读:https://docs.spring.io/spring-boot/docs/2.0.0.M5/gradle-plugin/reference/html/#running-your-application。根据用户的反馈,这个BootRun任务再次成为Gradle JavaExec任务的一个子类,它可以像任何其他JavaExec任务一样进行配置。

四、JDBC/ORM的变化

默认连接池

Spring Boot 2.0默认使用的连接池已从Tomcat的连接池更改为HikariCP。如果在提供的环境中使用Hikari,tomcat-jdbc包是provided,可以通过spring.datasource.type重写来移除它。同样,如果想要保留Tomcat连接池,只需将以下内容添加到应用的配置中即可:

spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource

数据库迁移

Liquibase和Flyway配置键被转移到了spring命名空间(即spring.liquibase和spring.flyway)。

Flyway/Liquibase的灵活配置

如果只提供了自定义url或user,auto-configuration会重用标准数据源属性而不是忽略它们。这使得可以针对迁移数据库的目的创建自定义的数据源DataSource。

数据源DataSource初始化的检测

如果你正在使用Flyway或Liquibase管理你的数据源的模式Schema,以及使用的是嵌入式数据库,Spring Boot 2.0将自动关闭Hibernate的自动DDL功能。

数据库初始化器

只有在使用嵌入式数据库时,应用程序的组件中出现了Spring Batch,Spring Integration,Spring Session或Quartz时,数据库初始化才会默认发生。其原先的enabled属性已被具有更多内容的枚举类型所取代。例如,如果想执行Spring Batch初始化,可以设置:

spring.batch.initialize-schema=always

数据源初始化

数据源DataSource的初始化仅针对嵌入式数据源启用的情况,并在应用程序使用生产数据库时立即关闭。此外,新的配置项spring.datasource.initialization-mode(替换原spring.datasource.initialize)提供了更多的控制。

数据源测量

Instrumentation负责监控所有可用的数据源并发布每个指标的度量标准(最小值,最大值和使用率)。

可配置的JPA映射资源

如果将Spring Boot的JPA配置扩展到注册映射资源,则有一个spring.jpa.mapping-resources属性。

JdbcTemplate

Spring Boot 2.0的auto-configuration可以通过spring.jdbc.template命名空间自定义JdbcTemplate。此外,NamedParameterJdbcTemplate自动配置的内容会重用JdbcTemplate。

jOOQ

Spring Boot 2.0可以根据数据源DataSource自动检测jOOQ方言(与JPA方言所做的相似)。此外,@JooqTest注释还引入了一个简化测试,但只供jOOQ使用。

Hibernate

Spring Boot 2.0支持的Hibernate的最低版本是5.2版。可以阅读Hibernate 5.2迁移指南以了解如何升级:https://github.com/hibernate/hibernate-orm/wiki/Migration-Guide—5.2

支持自定义Hibernate命名策略

对于高级场景,可以在上下文中定义ImplicitNamingStrategy或PhysicalNamingStrategy用作常规bean。

Hibernate属性自定义

可以通过暴露HibernatePropertiesCustomizer bean来提供更细粒度的方式自定义Hibernate的属性。

五、NoSQL

Cassandra

通过spring.data.cassandra暴露池选项。

支持响应式Couchbase

通过Spring Data响应式库可用于Couchbase,官方提供了一个spring-boot-starter-data-couchbase-reactive轻松上手指南。

InfluxDB

如果设置了InfluxDB的Java客户端和spring.influx.url,那么InfluxDB客户端会自动配置,也支持凭证。health终端可以监控InfluxDB服务器。

Redis缓存配置

可以暴露一个RedisCacheConfiguration来控制RedisCacheManager,同时引入了一个新的注释@DataRedisTest。

Elasticsearch

Spring Boot 2.0需要Elasticsearch 5.4以上版本。与Elastic宣布的嵌入式Elasticsearch不再受支持保持一致,原型的自动配置NodeClient已被删除。TransportClient 可以通过使用spring.data.elasticsearch.cluster-nodes提供要连接的一个或多个节点的地址来实现自动配置。

Mongo客户端自定义

通过定义一个MongoClientSettingsBuilderCustomizer类型的bean,Spring Boot的auto-configures可以将高级自定义应用于MongoDB客户端。

六、测试

Mockito 1.x

Spring Boot 2.0不再支持Mockito 1.x版的@MockBean和@SpyBean注释。如果不使用spring-boot-starter-test管理你的依赖,就应该升级到Mockito 2.x版。

TestRestTemplate的Kotlin扩展

Spring Boot 2.0提供了Kotlin的RestTemplate扩展,使开发者的体验保持一致。

测试改进

可以通过@WebMvcTest和@WebFluxTest注释自动扫描Converter Bean和GenericConverter Bean。


发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>