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及以上,红框内是可选。
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/232603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库性能测试报告总结模板

1计划概述 目的:找出系统潜在的性能缺陷 目标:从安全,可靠,稳定的角度出发,找出性能缺陷,并且找出系统最佳承受并发用户数,以及并发用户数下长时间运行的负载情况,如要并发100用户&a…

虚拟化之问答

Q: Type 1 与 Type 2 虚拟机监控程序有何区别? A: Type 2 虚拟机监控程序运行在主机操作系统之上,而 Type 1 虚拟机监控程序则没有主机操作系统。 Q: Secure 状态和 Non-secure 状态分别有多少个 IPA 空间? A: Secure 状态有两个 IPA 空间…

集合工具类Collections

概述 java.utils.Collections:是集合工具类 作用:Collections并不属于集合,是用来操作集合的工具类。 Collections常用的API Collections排序相关API 使用范围:只能对于List集合的排序。 排序方式1: 注意:本方式…

SecureCRT for Mac/win强大安全的终端SSH工具,SecureCRT助您网络连接无忧

在当今数字化时代,网络连接已成为生活和工作中不可或缺的一部分。而对于需要进行远程访问和管理的用户来说,一个稳定、安全的终端SSH工具是至关重要的。SecureCRT作为一款强大的终端SSH工具,为用户提供了安全、高效的远程连接解决方案。 首先…

Linux 文本处理

在处理大文本时,使用VI打开会非常慢,通常只需要查看其中的少量信息,比如查看前多少行、或者文件尾多少行。这种情况下可以使用head和tail命令,这种方式查看起来会非常快。 查看文件1.txt 前1000行: head -n 1000 1.t…

【兔子王赠书第13期】AI绘画实战:Midjourney从新手到高手

文章目录 写在前面AI绘画推荐图书一本书读懂AI绘画关键点内容简介作者简介 推荐理由粉丝福利写在后面 写在前面 如今AI技术已经进入了我们的日常学习生活中,如何用一本书轻松玩转AI绘画,领略无限艺术可能呢? AI绘画 AI绘画是指利用人工智能…

紫光FPGA学习之常见报错

紫光pango design suite报错: 一、4005: [D:/**/rtl/burstORsingle.v(line number: 47)] Logic for ddr_head_addr_rr does not match a standard flip-flop. 看来看去都没有发现这个定义没有问题呀,检查发现: 原来代码: always…

会议剪影 | 思腾合力受邀出席首届CCF数字医学学术年会

首届CCF数字医学学术年会(CCF Digital Medicine Symposium,DMS)于2023年12月15日-17日在苏州CCF业务总部召开。这次会议的成功召开,标志着数字医学领域进入了一个新的时代,计算机技术和人工智能在医学领域的应用和发展…

Wireshark高级网络安全分析

第一章:Wireshark基础及捕获技巧 1.1 Wireshark基础知识回顾 1.2 高级捕获技巧:过滤器和捕获选项 1.3 Wireshark与其他抓包工具的比较 第二章:网络协议分析 2.1 网络协议分析:TCP、UDP、ICMP等 2.2 高级协议分析:HTTP…

【Docker离线安装与注册服务】

Docker离线安装与注册服务 一、离线安装1. Docker2. Docker-compose3. docker卸载4. 注册docker服务 ​ 一、离线安装 1. Docker Docker 官网离线安装文档:Install Docker Engine from binaries 整理步骤如下: 1.去官网下载 docker 安装包,…

Appcelerator打包ipa有哪些优势

大家好,我是咕噜-凯撒,我们得先知道Appcelerator是啥,Appcelerator(现在更名为Axway Titanium)是一个跨平台的移动应用开发框架通过提供一种简化和加速移动应用开发的方式帮助你构建高质量的跨平台应用程序。那使用App…

复旦团队提出思维交流框架EoT,由CoT到EoT,可跨模型通信,表现更出色

大型语言模型(LLM)通过利用庞大的训练语料和强大的计算资源,在众多 NLP 任务中表现卓越。然而,在理解和进行推理方面,这些模型仍显得相对薄弱,仅依靠增加模型的大小无法解决这一问题。 然而,现…

如何使用 TailwindCSS 画一条0.5px的线条

背景 在移动端项目,一般为了让线条看起来更细、更锐利,此时使用0.5px的线条是非常合适的。那么如何使用TailwindCSS画一条0.5px的线条呢? 在实现这个需求的时候,首先去TailwindCSS官网查了一下border有没有对应的内置工具类&…

LeetCode 141. 环形链表

给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(…

人工智能在约会APP开发中的作用

约会APP已成为当今技术世界中结识人们的流行方式。这意味着您不必要求您的朋友去见某人约会。简而言之,技术改善了约会过程,而人工智能在约会APP开发中的兴起极大地影响了人们今天的约会方式。 在约会APP中使用人工智能技术可以改善个人寻找完美匹配对象…

Arcgis中利用模型构建器统一栅格数据的行列号

1、统一(X,Y) 方法:"数据管理工具箱"→"Projections and Transformations"→"Raster"→"Project Raster" 构建模型 这里以行列号最小的栅格(X,Y)为准(其实也就是栅格数据的空…

掌握Pytest魔法:一站式指南 to自动化测试框架的威力与实践

在之前的文章里我们已经学习了Python自带测试框架UnitTest,但是UnitTest具有一定的局限性 这篇文章里我们来学习第三方框架Pytest,它在保留了UnitTest框架语法的基础上有着更多的优化处理 下面我们将从以下角度来介绍Pytest: Pytest基本介绍…

将 OpenLDAP 与 IBM Spectrum LSF 集成

IBM Spectrum LSF 是一个工作负载管理平台,提供强大的资源管理功能来优化应用程序性能和最大限度提高资源使用率。 OpenLDAP 是轻量级目录访问协议 (LDAP) 的开放式源代码实现,提供集中式认证和目录服务。 通过遵循本教程中概述的步骤,您可以…

很受益的几条道理

来源:你最近悟出了什么道理? - 知乎 1、 持续禁欲。 放弃短期内能够让你上瘾的东西,比如打游戏、熬夜、刷剧,这些“奶头乐”只能够给你带来短期的快乐,并不能够让你成长,甚至会带来痛苦和无聊。而那些长期…

Unity与Android交互通信系列(2)

在上一篇文章中,我们介绍了Unity和Android交互通信的原理及在Unity中直接调用Java代码的方式,但没有给出代码示例,下面通过实际例子演示上篇文章中AndroidJavaClass、AndroidJavaObject两个类的基本用法,由于交互通信涉及到两端&a…