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

本文描述了从nacos1.4.6升级到2.x版本过程中,涉及到的SpringBoot、SpringCloud及SpringCloudAlibaba版本调整,包括处理循环依赖、quartz数据源配置变更、跨域问题、依赖排除和Druid库的bug修复。

背景:由于项目需求,需要将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("*");

跨越修改
想看详细涉及源码的可以看这篇:记一次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

<think>嗯,用户现在想升级Spring Boot到3.4.0版本,或者了解这个版本的变更内容。首先,我需要确认3.4.0是否已经发布。根据提供的引用,引用[1]提到Spring Boot 3.4.0还没来,可能用户看到的信息是旧的,或者3.4.0还在开发中。用户引用的资料里提到的是3.3.4版本,以及3.1.0、3.3.x和3.2的更新内容。所以可能3.4.0尚未正式发布。 接下来,用户的需求是升级指南和版本更新内容。由于3.4.0可能还没发布,应该建议用户参考最近的版本,比如3.3.x,或者查看官方的里程碑版本信息。另外,用户之前的引用中有提到从2.7.x升级到3.3.x的注意事项,这可能是一个线索,说明用户可能正在寻找从旧版本升级到最新的指南,但需要确认3.4.0是否存在。 另外,用户可能混淆了版本号,比如引用[1]中提到3.3.4版本,而用户问的是3.4.0。这时候需要指出可能3.4.0尚未发布,并建议查看官方文档或GitHub的发布页面。同时,根据引用[4],Spring Boot 3.2有新的AOT特性,可能3.4.0会有更多更新,但需要确认。 用户可能需要知道如何检查最新版本,比如通过Spring Boot的官方网站或者Maven仓库。同时,提醒用户升级时注意依赖兼容性,比如Hibernate、Logback等,如引用[1]中提到的。可能还需要提到Spring Boot的版本支持周期,比如引用[2]中提到的2.7和3.0版本即将结束支持,所以用户可能希望升级到长期支持的版本。 另外,用户可能遇到的具体问题,比如数据库配置、OAuth2客户端验证和SSL问题,在3.3.4中已修复,如引用[1],但用户问的是3.4.0,所以可能需要建议等待或关注官方公告。同时,升级步骤可能类似于3.3.x的步骤,如引用[3]中的pom.xml修改。 总结来说,回答需要告知用户3.4.0可能尚未发布,建议参考现有版本升级指南,并关注官方渠道获取最新信息。同时,提供一般性的升级步骤和注意事项,比如依赖管理、测试、配置调整等,并建议使用当前稳定版本如3.3.x,如果有的话。</think>### Spring Boot 3.4.0 升级指南与版本更新内容 #### 当前版本状态说明 根据引用[1]的信息,**Spring Boot 3.4.0 尚未正式发布**。目前最新稳定版本为 **3.3.4**(发布于2024年7月),主要聚焦于性能优化与稳定性提升[^1]。若需了解 3.4.0 的变更内容,建议关注以下渠道: 1. **官方 GitHub 仓库**:查看里程碑(Milestone)或发布候选(RC)版本的更新说明。 2. **Spring 官方博客**:通常会提前发布新版本的特性预览。 3. **Maven 中央仓库**:验证版本是否存在以确认发布状态。 --- #### 通用升级步骤(适用于任何版本) 若未来升级到 3.4.0,可参考以下流程: 1. **修改父 POM 版本**: ```xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.4.0</version> <!-- 待发布后替换为实际版本号 --> </parent> ``` [^3] 2. **检查依赖兼容性**: - 升级相关组件(如引用[1]中提到的 Hibernate、Logback)至适配版本。 - 验证第三方库(如数据库驱动、OAuth2 客户端)是否支持新版本。 3. **AOT/Native 编译适配**(若使用 GraalVM): ```bash ./mvnw spring-boot:process-aot # 新增的AOT预处理命令 ./mvnw -Pnative native:compile # 构建原生镜像 ``` [^4] 4. **测试与修复**: - 重点关注引用[1]中提到的**数据库配置**、**SSL 配置**和**OAuth2 客户端验证**的变更。 - 运行单元测试与集成测试,检查废弃方法(如 `JdbcTemplate.queryForObject` 的返回值类型变化)。 --- #### 预期新特性(基于历史版本推测) 若 3.4.0 发布,可能包含以下改进: 1. **性能优化**: - 更高效的 Undertow 集成(参考引用[1]中 `undertow.version` 升级)。 - Micrometer 指标收集的增强。 2. **开发体验提升**: - 简化的配置文件覆盖规则。 - 更清晰的启动时异常提示。 3. **安全性增强**: - 强化 OAuth2 资源服务器的默认配置。 - 支持更新的 TLS 协议版本。 --- #### 临时解决方案 若需提前体验 3.4.0 特性: 1. 在 `pom.xml` 中添加 Spring 快照仓库: ```xml <repositories> <repository> <id>spring-snapshots</id> <url>https://repo.spring.io/snapshot</url> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> ``` 2. 使用里程碑版本号(如 `3.4.0-M1`)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值