SpringBoot版本升级容易遇到的一些问题

 更新时间:2023年12月21日 11:00:10   作者:彩虹海。  
由于项目需求,需要将nacos 1.4.6版本升级到2.x版本,由此引发的springboot、springcloud、springcloud Alibaba一系列版本变更,本文给大家总结一下SpringBoot版本升级容易遇到的一些问题,需要的朋友可以参考下

背景:由于项目需求,需要将nacos 1.4.6版本升级到2.x版本,由此引发的springboot、springcloud、springcloud Alibaba一系列版本变更。

旧版本分别为:

Spring Boot 2.3.5.RELEASE

Spring Cloud Hoxton.SR9

Spring Cloud Alibaba 2.2.6.RELEASE

一、版本选择

1、springboot2.x.x及以下使用jdk11、jdk8都可以,springboot3.x.x最低要求jdk17。首先确定springboot版本需要支持jdk8,即需要springboot2.x.x。

2、根据项目需求,选择合适的版本。

参考:Git版本说明网址:(组件版本以及依赖关系)

例:要考虑支持nacos2.x,所以红框内是可选。

组件版本关系

Spring Cloud Alibaba 需要在2.2.8.RELEASE及以上,红框内是可选。

springboot版本

最终确定选择用*标记的最新版本。

Spring Boot 2.6.13

Spring Cloud 2021.0.5

Spring Cloud Alibaba 2021.0.5.0

nacos 2.2.0

二、奇奇怪怪的坑

1、循环依赖

springboot升级为2.6.13后项目启动报错:

循环依赖报错

Action:
Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.
出现的bug大概意思是:不鼓励依赖循环引用,默认情况下是禁止的。更新您的应用程序以删除 bean 之间的依赖循环。作为最后的手段,可以通过将 spring.main.allow-circular-references 设置为 true 来自动中断循环。

没有特殊处理代码,最后选择了修改yml配置文件,按照提示添加如下配置

spring:
  main:
    allow-circular-references:true

2、quartz数据源配置

springboot升级为2.6.13后项目启动报错:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘quartzScheduler’ defined in class path resource [org/springframework/boot/autoconfigure/quartz/QuartzAutoConfiguration.class]: Invocation of init method failed; nested exception is org.quartz.SchedulerConfigException: DataSource name not set.

报错原因:

spring-boot-starter-quartz 2.5.6 之前使用org.quartz.impl.jdbcjobstore.JobStoreTX定义quartz的默认数据源支持,quartz.properties如下

org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX

2.5.6的版本后将不再支持以上方式进行配置默认数据源,需改为如下配置

org.quartz.jobStore.class=org.springframework.scheduling.quartz.LocalDataSourceJobStore

3、跨域问题

项目启动成功,前端访问报错:

在这里插入图片描述

去网上查了原因后,是升级后spring的CorsFilter类针对CorsConfiguration新增了校验,最后修改方案是继续使用CorsFilter,使用官方推荐的allowedOriginPatterns即可,如下

// corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedOriginPattern("*");

跨越修改

4、版本依赖排除

升级后sentinel相关提示找不到依赖错误,cant reslove fastjson:1.2.83_noneautotype
排除当前使用的版本,引用maven仓库中有的版本

依赖版本信息

5、Druid的一个bug

抛出异常:maxEvictableIdleTimeMillis must be grater than minEvictableIdleTimeMillis。
Druid-1.1.10 升级为 Druid-1.1.22

数据库连接池升级

具体详细可参考这篇文章:Druid的一个Bug

以上就是SpringBoot版本升级容易遇到的一些问题的详细内容,更多关于SpringBoot版本升级问题的资料请关注脚本之家其它相关文章!

相关文章

  • Java基础之代码死循环详解

    Java基础之代码死循环详解

    这篇文章主要介绍了Java基础之代码死循环详解,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Spring 整合 MyBatis的实现步骤

    Spring 整合 MyBatis的实现步骤

    SpringMVC 本来就是 Spring 框架的一部分,这两者无须再做整合,所以 SSM 整合的关键就是Spring对MyBatis的整合,三大框架整合完成后,将以 Spring 为核心,调用有关资源,高效运作,这篇文章主要介绍了 Spring 整合 MyBatis的实现步骤,需要的朋友可以参考下
    2023-02-02
  • springboot集成shiro权限管理简单实现

    springboot集成shiro权限管理简单实现

    这篇文章主要介绍了springboot集成shiro权限管理简单实现,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Java中Excel高效解析工具EasyExcel的实践

    Java中Excel高效解析工具EasyExcel的实践

    EasyExcel是阿里巴巴开源的一个excel处理框架,已使用简单,节省内存著称,下面这篇文章主要给大家介绍了关于Java中Excel高效解析工具EasyExcel实践的相关资料,需要的朋友可以参考下
    2022-04-04
  • Java String类简单用法实战示例【字符串输出、比较】

    Java String类简单用法实战示例【字符串输出、比较】

    这篇文章主要介绍了Java String类简单用法,结合具体实例形式分析了Java使用String类实现字符串的输出和比较功能相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • Java基本数据类型族谱与易错点梳理解析

    Java基本数据类型族谱与易错点梳理解析

    Java有八大基本类型,很多同学只对经常使用的int类型比较了解。有的同学是刚从C语言转入Java学习,误以为两者的基本数据类型完全相同,这也是大错特错的。今天这本Java基本数据类型全解析大字典,可以帮助你直接通过目录找到你想要了解某一种基本数据类型
    2022-01-01
  • 关于Java中@SuppressWarnings的正确使用方法

    关于Java中@SuppressWarnings的正确使用方法

    这篇文章主要介绍了关于Java中@SuppressWarnings的正确使用方法,@SuppressWarnings注解主要用在取消一些编译器产生的警告对代码左侧行列的遮挡,有时候这会挡住我们断点调试时打的断点,需要的朋友可以参考下
    2023-05-05
  • mybatis中使用大于小于等于的正确方法

    mybatis中使用大于小于等于的正确方法

    在mybatis中sql是写在xml映射文件中的,如果sql中有一些特殊字符的话,在解析xml文件的时候就会被转义,下面我们就一起来看一下大于小于等于是怎么转义的
    2021-04-04
  • Spring Security系列教程之会话管理处理会话过期问题

    Spring Security系列教程之会话管理处理会话过期问题

    会话过期,是指当用户登录网站后,较长一段时间没有与服务器进行交互,将会导致服务器上的用户会话数据(即session)被销毁。这篇文章主要介绍了Spring Security系列教程之会话管理处理会话过期问题,需要的朋友可以参考下
    2021-10-10
  • 深入理解 Java、Kotlin、Go 的线程和协程

    深入理解 Java、Kotlin、Go 的线程和协程

    这篇文章主要介绍了深入理解 Java、Kotlin、Go 的线程和协程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12

最新评论