记录项目中的Spring Boot从1.5.9.RELEASE版本升级到2.5.2的过程中遇到的问题及解决办法


前言

项目中的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的主要是使用,没去关注一些版本间的变化,导致排查起来比较累。以后还是要多去关注框架的版本变化,多看源码,多学习。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值