spring boot版本升级遇到的一些问题

背景:由于项目需求,需要将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及以上,红框内是可选。

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

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配置文件,按照提示添加如下配置

yaml 复制代码
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如下

bash 复制代码
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX

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

bash 复制代码
org.quartz.jobStore.class=org.springframework.scheduling.quartz.LocalDataSourceJobStore

3、跨域问题

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

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

java 复制代码
// corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedOriginPattern("*");

想看详细涉及源码的可以看这篇:记一次spring boot升级跨域问题的坑

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

相关推荐
mldong11 小时前
引擎从不发一条消息:jeeflow 的两类扩展点与消息模块的分工
java·架构
君顾111 小时前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
zhanghe68712 小时前
es的密码带有特殊字符,导出
java
pnoker12 小时前
IoT DC3 概念解读:把设备抽象成一套语义模板——位号、指令、事件与面向智能体的设备建模
java·人工智能·物联网·iot·dc3
my_realmy12 小时前
Java SE 基础学习笔记(一):面向对象、继承多态、抽象接口与异常(JDK 8)
java·多线程·并发··生产者消费者模式
天远数科13 小时前
风险治理实战:基于天远车信盟出险构建自动化理赔核保流水线
java·网络·人工智能·自动化
步行cgn13 小时前
YAML 的语法规则
spring boot·后端
骇客野人13 小时前
SpringBoot电商系统用户注册、登录、留存及数据埋点设计与落地实施方案
java·spring boot·后端
摇滚侠13 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 数据库初始化机制 阅读笔记 36
数据库·spring boot·笔记
qiuhaipeng113 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库