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.还有一些其它未知的问题
具体升级过程中具体解决。