Spring Boot 2.0 如约而至,升级与否?

万众期待的Spring Boot 2.0终于发布了第一个正式版本,为什么Spring Boot 2.0如此受期待呢?我认为主要有以下几个原因:

  1. 支持最新的Java 9
  2. 基于Spring 5构建,Spring的新特性均可以在Spring Boot 2.0中使用
  3. 为各种组件的响应式编程提供了自动化配置,如:Reactive Spring Data、Reactive Spring Security等
  4. 支持Spring MVC的非阻塞式替代方案WebFlux以及嵌入式Netty Server
  5. Spring Boot 2.0的发布,Spring Cloud Finchley还会远吗?

上述列举的内容是笔者主要关心的重要内容,并非Spring Boot 2.0所有的新特性,对于不同的使用者来说相信会有不同的关注点。除此之外,在Spring Boot 2.0中还有非常多其他令人振奋的新特性,比如:对HTTP/2的支持、新增了更灵活的属性绑定API(可以不通过@ConfigurationProperties注解就能实现配置内容读取和使用)、对Spring Security整合的简化配置、Gradle插件的增强、Actuator模块的优化等等。本文不对这些新特性做详细的介绍,下面主要说说,我们是否有必要将我们的Spring Boot 1.x升级到Spring Boot 2.x,在这过程中,我们需要考虑和注意哪些问题。

Java版本要求的变化

我们在选择是否要升级Spring Boot的时候,最先需要考虑的是Java版本的选择。在Spring Boot 2.0中提高了对Java版本的要求,我们需要至少使用Java 8才能使用它,如果您的Spring Boot应用还运行在Java 7上,那就还得考虑Java的升级成本。

另外,在未来的一段时间内,您是否想要使用Java 9将是一个影响升级与否的重要决策依据,因为Spring Boot 1.x版本明确说明了没有对Java 9的支持计划;换言之,如果你想将Spring Boot运行在Java 9上,那么你必须升级到Spring Boot 2.0。

Tips:当前版本的Spring Boot 2.0虽然支持Java 9,但是依然还有一些问题。比如:JDK的代理支持需要使用AspectJ 1.9,但是该版本还处于RC版;还不支持Apache Cassandra;对于JSP TLDs在嵌入式Tomcat中也无法支持等情况。

依赖组件的升级

Spring Boot的Starter中整合了不少优秀的第三方组件,这些组件的升级也需要我们做好一定的考量,在这些组件的版本升级过程中,使用上是否有变化等问题。其中,最为关键的几个组件需要我们注意:

  • Tomcat升级至8.5
  • Flyway升级至5
  • Hibernate升级至5.2
  • Thymeleaf升级至3

Tips:前几日曝出的Tomcat漏洞问题。经查Spring Boot 2.0选用的版本为8.5.28,属于安全版本,所以大家可以放心使用。

依赖重组和配置重定位

在Spring Boot 2.0的升级过程中,可能这部分内容将是大家要做出较多修改的地方,所以建议大家在这里留个心眼。由于Spring Boot在构建Starter POMs的时候并非是扁平的一层结构,一些功能模块Starter之间是存在包含引用关系的,比如:spring-boot-starter-thymeleaf中包含了spring-boot-starter-web,因为thymeleaf模版引擎之前肯定是在Spring MVC下使用的。但是,在Spring Boot 2.0中,WebFlux的出现对于Web应用的解决方案将不再唯一,因此spring-boot-starter-thymeleaf中的依赖就不在包含spring-boot-starter-web,开发人员需要自己添加spring-boot-starter-web或spring-boot-starter-webflux来决定是使用哪个模块实现Web应用。

除了类似上面的依赖重组之后,在Spring Boot 2.0中对于配置属性的重定位也是比较多的,这将导致一些原有的配置将不再生效,需要我们手工的去修改这些配置的Key来完成升级适配。比如,一些与servlet相关的server.*属性重定位到server.servlet前缀下:

更多的依赖变化、配置重定位以及默认配置的变化,读者可自行查阅官方升级手册:Spring Boot 2.0 Migration Guide

不必要的顾虑

之前有朋友在spring4all社区上问:如果Spring Boot升级2.0,2.0出了那么多新功能,我们的业务代码是否也需要随之修改,风险会不会很大?其实,这个问题大家完全不用太多的顾虑,Spring Boot 2.0虽然新增了很多强大的新特性,但是对于原有功能的支持并没有抛弃。所以,就算我们不用任何类似WebFlux这样的新功能,将工程升级到了Spring Boot 2.0之后,继续使用Spring MVC开发我们的项目也是完全没有影响的。只是,就如上面所述的,我们可能需要做一些依赖和配置上的调整才能继续将应用正常的运行起来。

总结与展望

感谢大家能够读完上面我对Spring Boot 2.0的薄见,希望这些内容能够对您在Spring Boot 2.0的选择上有一定的参考价值。这个版本虽然不像Spring Boot 1.0那样颠覆我们对繁琐的Spring应用的认识,但是依然透露着很多时代前沿的气息。同时,Spring Boot 2.0的发布,也意味着Spring Cloud Finchley里正式发布又近了一步,因为这个版本中同样的将会带来很多令人兴奋的内容,相信这一天的到来也不远了!

对于当前Spring Boot 2.0的迁移升级,作为一名Spring Boot与Spring Cloud的忠实拥护者,在时间允许的情况下,这是一件必然会去尝试的事情,在未来的时间里,我也尽可能的希望抽出时间继续分享一些其中的问题与收获,与大家共勉!

原文发布于微信公众号 - 程序你好(codinghello)

原文发表时间:2018-05-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java技术栈

Spring Cloud 多版本怎么选择?帮你解惑!

2043
来自专栏SpringBoot 核心技术

第三十一章:SpringBoot配置文件application.properties参数详解

1904
来自专栏zhisheng

Spring Boot 2.0系列文章(三):Spring Boot 2.0 配置改变

前提 好久没更新文章了,本来打算在毕业之前不更新了,这里,对不住了,我又更新了。?之前翻译了两篇 Spring Boot 2.0 的文章,Spring Boot...

3157
来自专栏向治洪

Spring Boot微服务架构入门

概述 还记得在10年毕业实习的时候,当时后台三大框架为主流的后台开发框架成软件行业的标杆,当时对于软件的认识也就是照猫画虎,对于为什么会有这么样的写法,以及这种...

23810
来自专栏程序猿DD

Spring Cloud构建微服务架构:服务注册与发现

在继续编写《Spring Cloud构建微服务架构》系列文章之前,先复刻和重新整理一下之前的内容。除了涵盖原有内容之外,同时做了一些调整,并补充了一些之前缺少的...

3395
来自专栏JavaEdge

Spring Boot神器之Spring Date Jpa

一、Spring Date Jpa介绍 什么是JPA? JPA是Java Persistence API的简称,中文名Java持久层API,是JDK5.0注解或...

43012
来自专栏编程

如何更深入地理解Java编程中的框架部分

在很多年以前,Java程序员做项目使用的是SSH框架。SSH框架一般指的是Struts、Spring、Hibernate,到后来Struts2代替了Struts...

2105
来自专栏企鹅号快讯

Spring Framework 5.0 新特性有这些

Spring Framework 5.0 是自 2013年12月版本 4 发布之后 Spring Framework 的第一个主发行版。Spring Frame...

1978
来自专栏Java技术栈

你必须了解Spring的生态

Spring不止是提供了IOC、AOP的功能,还提供了大量的基于Spring的项目,拿来用就行了,用于一站式开发,大大降低了开发的难度。 下面列举下主要的一些S...

3589
来自专栏JAVA技术zhai

Spring Cloud“小弟”的十八般武艺

​ ? Spring Cloud是什么鬼? Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设...

29310

扫码关注云+社区

领取腾讯云代金券