Spring Boot 2.0 要求Java 版本必须8以上, Java 6 和 7 不再支持。
为了支持reactive使用场景,内嵌的容器包结构被重构了的幅度有点大。EmbeddedServletContainer被重命名为WebServer,并且org.springframework.boot.context.embedded 包被重定向到了org.springframework.boot.web.embedded包下。举个例子,如果你要使用TomcatEmbeddedServletContainerFactory回调接口来自定义内嵌Tomcat容器,你现在应该使用TomcatServletWebServerFactory。
大量的Servlet专属的server.* properties被移到了server.servlet下:
Old property | New property |
---|---|
server.context-parameters.*
|
server.servlet.context-parameters.*
|
server.context-path
|
server.servlet.context-path
|
server.jsp.class-name
|
server.servlet.jsp.class-name
|
server.jsp.init-parameters.*
|
server.servlet.jsp.init-parameters.*
|
server.jsp.registered
|
server.servlet.jsp.registered
|
server.servlet-path
|
server.servlet.path
|
由此可以看出一些端倪,那就是server不再是只有servlet了,还有其他的要加入。
Actuator的端点(endpoint)现在默认映射到/application,比如,/info 端点现在就是在/application/info。但你可以使用management.context-path来覆盖此默认值。
@ConditionalOnBean现在的判断条件由OR变为了AND。
1.5的时候此远程工具被标为deprecated,2.0的时候将会把这个支持彻底remove掉,以及基于此功能的项目也会被删除掉。
由于Spring Loaded项目已被移到了attic了,所以不再支持Spring Loaded了。现在建议你去使用Devtools。Spring Loaded不再支持了。
不能再自动配置HazelcastInstance进行缓存。 因此,spring.cache.hazelcast.config属性不再可用。
默认的连接池已经由Tomcat切换到了HikariCP。如果你过去使用spring.datasource.type在基于Tomcat的应用程序中强制使用Hikari,现在你可以删除这个覆盖了。同样的,如果想要使用Tomcat的连接池,只需要简单的加入以下配置就可以了:
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
针对一个Filter默认的dispatcher类型现在为 DipatcherType.REQUEST,这样就保证了Spring Boot和Servlet默认的配置统一了。
Spring Security的 filter 现在可以自动配置如下类型了: ASYNC, ERROR, and REQUEST 。这样就让Spring Boot中的配置和Spring Security默认配置保持一致了。
Spring Session的 filter 现在支持自动配置如下dispatcher类型 ASYNC, ERROR, and REQUEST 。同样是为了让Spring Boot的配置与Spring Session的默认配置保持一致。值得注意的是从Spring Session 2.0起, Mongo和GemFire 将不再被支持。
要求Jetty最低版本为9.4。
要求Tomcat最低版本为8.5。
要求Hibernate最低版本为5.2。
要求Gradle最低版本为3.4。
SendGrid最低支持版本是3.2。为了支持这次升级,username和password已经被干掉了。因为API key现在是唯一支持的认证方式。
以前有几个Spring Boot starter是依靠Spring MVC和spring-boot-starter-web传递的。 为了对Spring WebFlux的支持,spring-boot-starter-mustache和spring-boot-starter-thymeleaf不再依赖spring-boot-starter-web。现在你要自己选择并添加spring-boot-starter-web或spring-boot-starter-webflux作为依赖。
记住:web和webflux是平行的关系。我们之前的文章中提到过spring webflux。你可以移步查看: Spring 5 新增全新的reactive web框架:webflux 。
针对Solr的健康检查信息不再是solrStatus这个属性了。现在是status property,是一个标准状态属性,对应于一个的整型值。
Spring Boot现在默认是使用CGLIB代理,同时包含AOP支持。如果你需要基于代理(proxy-based)的代理策略,你需要把 spring.aop.proxy-target-class
设置为false。
从Spring Boot的CLI中删除了测试支持,现在建议你使用Maven或Gradle构建应用程序,去使用它们提供的丰富的测试支持吧。
@ConfigurationProperties
里的ignoreNestedProperties属性已被删除。
为了更好的反映Servlet的特性, spring.http.multipart. 属性已经被命名为 spring.servlet.multipart。
ps:其实就是因为webflux来了,只能把servlet和webflux区分开来。
过去Mustache模板的默认的文件扩展名是.html。现在.mustache成了官方指定的扩展名,而且很多的IDE插件已经支持了此后缀。你可以通过spring.mustache.suffix来覆盖现在的默认的支持。
Spring Boot 2.0 是建立在Spring Framework 5.0之上的(最低要求)。Spring 5最大的亮点就是reactive。你可以去看看这篇: Spring 5 新增全新的reactive web框架:webflux 。
松绑定已经得到改善。这里简单的举个例子:
简单的属性在删除特殊字符然后转成小写后进行绑定。比如:
下面的属性最终都会被映射为spring.jpa.databaseplatform=mysql:
spring.jpa.database-platform=mysql
spring.jpa.databasePlatform=mysql
spring.JPA.database_platform=mysql
有关详细信息,我们可以查阅: https://github.com/spring-projects/spring-boot/wiki/Relaxed-Binding-2.0
Spring Boot 2.0 提供了一个新的starter ,用来支持Reactive Spring web frameworks。该starter为spring-boot-starter-webflux。其中Reactor Netty是默认的web引擎(spring-boot-starter-reactor-netty)。
Spring Boot 2.0 对一下的数据库提供了自动配置( auto-configuration )的reactive的支持:
@DataMongoTest
测试注解也是支持reactive的。
Reactive controller现在可以使用 @WebFluxTest
来测试。它提供的功能和 @WebMvcTest
类似。而且WebTestClient可以直接使用,已经被自动配置(auto-configured)了。
当你使用 @SpringBootTest
with an actual server (that is, either DEFINED_PORT or RANDOM_PORT), a WebTestClient is available the same way TestRestTemplate is.
使用@SpringBootTest进行WebTestClient自动配置
将@SpringBootTest用于实际服务器(即DEFINED_PORT或RANDOM_PORT)时,WebTestClient的可用方式与TestRestTemplate相同。
Spring Boot的Gradle插件已在很大程度上被重写,以实现一些重大的改进。有关这方面的就不细讲了,感兴趣的同学可以去一探究竟。
针对/loggers端点上POST操作的状态码已又200改为204。
Elasticsearch已升级到5.4。 与Elastic公司宣布不再支持嵌入式Elasticsearch的情况一样,NodeClient的自动配置已被删除。就是这么的节奏一致。现在你可以通过使用spring.data.elasticsearch.cluster-nodes自动配置TransportClient,具体value可以是一个或多个要连接的节点的地址。
Spring Boot 2 针对Quartz调度器提供了支持。你可以加入spring-boot-starter-quartz starter来启用。而且支持基于内存和基于jdbc两种存储。
Spring Boot公开了一个新的spring.data.web配置名称空间,可以轻松配置分页和排序。
一个全新的spring-boot-starter-json starter 聚合了很多常用的json工具,可以支持对json的读写。
它不仅仅提供了jackson-databind而且当你使用java8时候,还提供了有用的模块:jackson-datatype-jdk8, jackson-datatype-jsr310 和 jackson-module-parameter-names。
之前使用jackson-databind的地方就可以使用这个新的starter了。
Thymeleaf starter现在包含了thymeleaf-extras-java8time,开箱即用。
如果InfluxDB java client 和 the spring.influx.url 被设置, 一个InfluxDB client现在就会被自动配置。而且现在支持认证。
Spring Boot自动配置(auto-configuration)的JdbcTemplate现在可以通过spring.jdbc.template命名空间进行定制。 此外,自动配置(auto-configuration)的NamedParameterJdbcTemplate在底层就是JdbcTemplate。
Spring Boot现在可以根据DataSource自动检测出jOOQ方言(类似于JPA方言)。
此外,还引入了@JooqTest用于只有jOOQ才能hold的测试场景。
新加了一个测试的时候针对redis的新注解。
现在可以通过MongoClientSettingsBuilderCustomizer这个bean来高度定制化Spring Boot的Mongo客户端。
spring.data.cassandra 现在支持池化(pooling)。
现在支持一次性批量消费多个ConsumerRecord,你可以创建一批的监听器(listener),这样设置:
spring.kafka.listener.type=batch
Web filters 现在在所有支持的容器中都会被立刻初始化。也就是eagerly,急加载。
现在不满足条件(unconditional)的class也会被包含进来,在自动配置(auto-configuration)的Actuator端点的response中一并返回。
现在Loggers端点(endpoint) 支持reset日志级别到默认设置。
插件的配置属性现在的暴露方式有所改变,现在所有的都是以spring-boot为前缀,这是为了避免和其他插件冲突而导致错误。
比如,以下命令行可以启用profile foo:
mvn spring-boot:run -Dspring-boot.run.profiles=foo
已经从Devtools中删除了通过HTTP进行远程调试的支持。(#9489)
为了和Tomcat和Undertow看齐,现在对Jetty的所有的http method的请去都进行压缩,而不是之前那样只对GET request进行压缩(#8184)。
当配置一个reactive web server时,针对Jetty,Tomcat,Undertow的定制化器现在会被调用 (#9572)。
Jolokia不再是一个endpoint。并且默认是禁用的,这已和其他的web端点保持了一直。它的配置已转移到了management.jolokia。如果想启用 Jolokia, 向你的配置加入management.jolokia.enabled=true就可以了。
Liquibase 和 Flyway 配置的key 已被转移到了spring 的命名空间下:(比如: spring.liquibase and spring.flyway )。
@AutoConfigureOrder 默认值由Ordered.LOWEST_PRECEDENCE变为0。 (#10142)
一个新的ApplicationContextRunner 测试工具让我们测试自动配置变得容易。 未来将会把所有的测试套件都迁移到这个模型上。
基本支持了Java 9。之所以是“基本”,是因为还没得到用户的验证。
Redis客户端驱动现在由Jedis变为了Lettuce。使用Jedis的同学们,大概知道方向了吧。
但仍然支持Jedis,那么exclude掉io.lettuce:lettuce-core,然后添加 redis.clients:jedis就是了。
Spring Security OAuth 项目中的功能将会迁移到Spring Security中。将会OAuth 2.0。
Mockito 1.x不再支持@MockBean和@SpyBean。 如果你不使用spring-boot-starter-test来管理依赖关系,则应升级到Mockito 2.x。
除了Jackson 和 Gson,现在还支持了JSON-B 。JSON测试支持也已更新为新的JsonbTester类。
Spring Session 用现在可以通过/application/sessions Actuator Endpoint进行查找和删除session。
如果你希望 @ConfigurationProperties
对象上开启验证,那么只需要添加 @Validated
就可以了。
针对Spring Mobile的自动配置和依赖不再支持,已被删除。汗,我们之前的文章中还介绍过这个项目: 使用Spring Boot开发一个Spring Mobile程序 。
Spring Boot现在让WebFlux的错误约定和MVC保持一致就像使用MVC一样:默认视图和JSON响应错误,自定义错误视图等等。
你现在可以为你的WebFlux应用配置SSL,使用 server.ssl.*
配置属性。Tomcat, Jetty, Undertow 和 Reactor Netty都支持。
你现在也可以为你的MVC 或 WebFlux应用配置HTTP/2:
使用 server.http2.enabled
。
使用了自动配置工厂的Kafka listener现在支持 @SendTo
。
Spring Boot 2.0 发布了Kotlin runApplication扩展:
package com.example.demo import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication @SpringBootApplication class DemoApplication fun main(args: Array<String>) { runApplication<DemoApplication>(*args) }
CommandLineRunner 现在执行批处理job的启动order是0。
Spring Boot 2.0 现在支持静态和模板化两种欢迎页类型。它会首先去配置好的静态内容的目录下查找index.html文件,如果没找到,然后就去查找index模板。 只要找到了一个就会被用作欢迎页。
在Spring Boot之前的版本中,对context path貌似并没有那么的重视一样。现在当我们使用内嵌容器的时候, context path 会被打印在HTTP 端口的旁边,像这样:
Tomcat started on port(s): 8080 (http) with context path ‘/foo’
Converter 和 GenericConverter beans现在可以被@WebMvcTest和@WebFluxTest自动扫描到了。
status endpoint 已经被删除了,现在改成了health。这个health 端点既可以展示status也可以有更多的细节。 health 端点现在默认是被暴露的(只展示status)。如果你希望展示更多的细节信息,可以通过修改属性management.endpoints.health.show-details来实现:
management.endpoints.health.show-details=true