文章目录
前言
项目中的springboot版本比较老,导致部署时有些问题,因此组长叫我把版本升级到最新的(那时候最新是2.5.2)。这边记录下升级过程中遇到的报错、排查过程及解决办法。
一、修改父类项目的POM文件版本
将version都改为2.5.2
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.2</version>
<relativePath />
</parent>
<spring-boot_version>2.5.2</spring-boot_version>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
<version>${spring-boot_version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>${spring-boot_version}</version>
</dependency>
...
对应的eureka的包也要变化
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
改为
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
加上config和validation依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
Spring Cloud Dependencies的版本也要修改,这个试了好多版本,Hoxton.SR12,Finchley.SR4都不行,最终试了最新的2020.0.2版本是可以的。
二、解决编译错误
1.DataSourceBuilder包的路径修改
原先是
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
去掉autoconfigure,改为
import org.springframework.boot.jdbc.DataSourceBuilder;
2.Mongodb中的一些实体类的用法修改
原先的用法
Query query = new Query();
query.with(new Sort(Sort.Direction.DESC,"time"));
PageRequest page = new PageRequest(0,size);
代码报错,点进去看,发现方法都静态化了,改为
Query query = new Query();
query.with(Sort.by(Sort.Direction.DESC,"time"));
PageRequest page = PageRequest.of(0,size);
3.Aop相关的一些注解报错,需要引入aop的包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
4.Kafka的包更新
由之前的0.10.0.0升级到了2.8.0,之后代码中的注解也发生了变化
@KafkaListener(topics = "data-dictionary-save-update", group = "group-handle")
group报错,要改为groupId
@KafkaListener(topics = "data-dictionary-save-update", groupId = "group-handle")
@KafkaListener(topics = “data-dictionary-save-update”, group = “group-handle”)
至此,报错是解决了,之后尝试去启动项目。
三、解决项目启动报错
1.Error:Kotlin
报了个很奇怪的错:Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its 1.5.1,1.1.16。感觉是idea方面的问题。
百度没搜到好用的解决办法,试了好多都不行。最后谷歌找到了一篇能解决的。
链接: link.
主要就是rebuild一下项目,idea中build 》rebuild project即可。
2.ehcache1报错报错:
报错:net.sf.ehcache.Ehcache.getStatistics()Lnet/sf/ehcache/statistics/StatisticsGateway;
首先看了下,发现项目中并没有ehcache的包,应该是其它包中有引用了ehcache。在idea右侧的maven里的依赖中去寻找,发现是shiro包中用到了ehcache包,因此先升级shiro包,但是还是报错。那么就重新引入一个最新的包
<dependency>
<groupId>net.sf.ehcache.internal</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.10.7</version>
</dependency>
结果还是报错,报一样的错,也就是表明实际用的还是shiro中引入的包,因此将shrio包中除去ehcache的包。
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-quartz</artifactId>
<version>1.7.1</version>
<exclusions>
<exclusion>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
</exclusion>
</exclusions>
</dependency>
发现可以了,项目成功启动了。迫不及待的用postman去调了测试用的接口,结果调不通。。。
四、解决接口调不通的问题
先看启动过程中,是否扫描了控制层的注解,发现是扫描到了,那就是接口中的路径应该没错的。于是,各种尝试,什么加个/之类的,都没用。这时候再回去看配置
图中已经看不出来了,而当时的server.context-path有报错的提示,查了下原来是这个注解变了,改为了server.servlet.context-path,改正后就能调通接口了。
总结
这次升级的任务是完成了,但是过程比较痛苦,说白了还是太菜了。之前对boot的主要是使用,没去关注一些版本间的变化,导致排查起来比较累。以后还是要多去关注框架的版本变化,多看源码,多学习。