SpringBoot1.0升级2.0需要注意什么?
1.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中也无法支持等情况。
2.依赖组件的升级
Spring Boot的Starter中整合了不少优秀的第三方组件,这些组件的升级也需要我们做好一定的考量,在这些组件的版本升级过程中,使用上是否有变化等问题。其中,最为关键的几个组件需要我们注意:
- Tomcat升级至8.5
- Flyway升级至5
- Hibernate升级至5.2
- Thymeleaf升级至3
Tips:前几日曝出的Tomcat漏洞问题。经查Spring Boot 2.0选用的版本为8.5.28,属于安全版本,所以大家可以放心使用。
3.依赖重组和配置重定位
在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