2.0与1.5有差别,但差别不大。基本上基于SpringBoot的代码不需要改动,但有些配置属性和配置类,可能要改动,改动原因是:

1.配置已经不存在或者改名

2.类已经不存在改名

一般正常的MVC,数据库访问这些都不需要改动,以下为主要的区别:

对比后结论:建议升级到springCloud2.0.2版本。该版本在国外国内使用比较普遍,问题较少,出现问题的解决方案资料较多。

分类

springCloud1.5

springCloud2.0

备注

spring版本和jdk

spring可支持更低的版本。支持jdk7版本及以上。

基于Spring5和JDK8

Maven

无限制

建议使用较新的版本

MVC相关配置等部分

可以在配置类中继承抽象类WebMvcConfigurerAdapter来实现。

有些定制类改动了,比如:1. WebMvcConfiguer,由抽象类改为接口,这是因为JDK8对接口有新的支持形式。

2.统一错误处理,基类AbstarctErrorController也改动非常大。

3. MVC里的视图渲染Freemaker视图解析器也有改动,默认情况下,它会自动加上ftl来来寻找模板

JPA部分

JPA中,findById返回了一个Optional对象,改动较大,会直接影响所有业务代码

开发中未使用JPA

SpringBoot配置

配置文件的中文必须转码才能在程序中正常显示

web应用的ContextPath配置属性已经改动。

配置文件的中文可以直接读取,而不需要转码。自动装配里Boot提供的JavaVersion类包名改动了。根据jdk版本自动装配的需要调整代码

缓存的实现方式

内部CacheManager和Cache的接口改动,因此缓存机制内部变化交大,书里提到的一二级分布式缓存实现方式变化就比较大

开发中未使用

Acutator

SpringBoot1.5和2变化较大,默认情况,不再启用所有监控,另外编写自己监控信息,完全需要重写,HealthIndicator,EndPoint变化很大

Tomcat配置

老的版本采用的是TomcatEmbeddedServletContainerFactory类

已经没有类TomcatEmbeddedServletContainerFactory了,采用了全新的ServletWebServerFactory类来构造Tomcat的配置

区别较大

ElasticSearch

无改动,SpringBoot2做的更好。需要密切注意Elastic

Search本身版本变化,它也是版本帝,Spring Boot略有点根不上。因此不能担保在因为Elastci

Search的RESTAPI变化导致Spring Boot不兼容,所以一定要使用Spring Boot指定的版本

开发中未使用

Spring Boot1.5X升级到2.0

需要升级的相关内容如下:

1.依赖JDK版本升级

2.x至少需要JDK 8的支持,2.x里面的许多方法应用了JDK 8的许多高级新特性,所以你要升级到2.0版本,先确认你的应用必须兼容JDK 8。

另外,2.x开始了对JDK 9的支持。

2.第三方类库升级

2.x对第三方类库升级了所有能升级的稳定版本,一些值得关注的类库升级我给列出来了。

1) Spring Framework 5+

2) Tomcat 8.5+

3) Flyway 5+

4) Hibernate 5.2+

5) Thymeleaf 3+

3.启动类报错

问题:

启动类SpringBootServletInitializer标红报错,导入的类不对。

原因:

Spring Boot部署到Tomcat中去启动时需要在启动类添加SpringBootServletInitializer,2.0和1.0有区别。

4.配置文件报错

问题:

配置文件中项目名称配置报错:server.context-path: /spring

原因:

大量的Servlet专属的server.* properties被移到了server.servlet下

5. Web Starter作为传递依赖

问题:

工程用的模板是thymeleaf,启动报错提示找不到spring-boot-starter-web

原因:

以前有几个Spring Boot starter是依赖于Spring MVC而传递的spring-boot-starter-web。在Spring WebFlux新的支持下,spring-boot-starter-mustache,spring-boot-starter-freemarker并spring-boot-starter-thymeleaf不再依赖它。开发者有责任选择和添加spring-boot-starter-web或spring-boot-starter-webflux。

解决方案:

导入spring-boot-starter-web既可。

6. Thymeleaf 3.0默认不包含布局模块

问题:

启动项目的时候发现首页空白,查看后台也没有任何的报错信息

原因:

Spring Boot 2.0中spring-boot-starter-thymeleaf包默认并不包含布局模块,需要使用的时候单独添加。

7.拦截器过时

问题:

升级后,WebMvcConfigurerAdapter提示过时

原因:

升级后的springBoot,使用了java8的特性default方法,所以直接实现WebMvcConfigurer这个接口即可。

8.静态资源被拦截

问题:

访问系统的时候登录样式没有加载

原因:

1.5版本时候META-INF/resources

/ resources / static / public都是spring boot认为静态资源应该放置的位置,会自动去寻找静态资源,而在spring boot 2.0则对静态资源也进行了拦截,当拦截器拦截到请求之后,但controller里并没有对应的请求时,该请求会被当成是对静态资源的请求。此时的handler就是ResourceHttpRequestHandler,就会抛出上述错误。

解决方案:

解决办法就是,在拦截器那里排除静态资源的请求路径

9.全局异常特殊处理

问题:

上一篇提到过的有些错误你可能想特殊对待处理的,现在对应代码标红,找不到对应的类

原因:

新版本后该方法去掉了,需要换成新的方法处理

10.还有一些其它未知的问题

具体升级过程中具体解决。