当前位置: 首页 > news >正文

SpringBoot多数据源启动出现循环依赖问题

在使用SpringBoot的项目中,如果是有使用多数据源,可能会存在启动时数据源循环依赖的报错,是因为使用了多数据源注入,和DataSourceAutoConfiguration数据源自动配置的DataSourceInitializerInvoker互相产生循环依赖导致。

这种错误可能会一些环境才会报错,是因为当一些依赖的bean先创建的时候,就会因为注入需要DataSource,因此进行创建动态数据源DynamicDataSource(即自定义的AbstractRoutingDataSource类的实现类),创建DynamicDataSource前会先创建依赖的masterDataSource,masterDataSource创建好后会触发DataSourceInitializerPostProcessor的postProcessAfterInitialization方法,导致需要创建DataSourceInitializerInvoker,而DataSourceInitializerInvoker又需要依赖DynamicDataSource,多个地方都需要创建DynamicDataSource,从而出现循环依赖问题。有些环境不出现是因为跟打包和环境加载的类顺序有关,如果依赖的bean在DynamicDataSource后创建就不会产生循环依赖。

最终解决方案:在启动的时候排除掉 DataSourceAutoConfiguration 自动配置。

附加:如果确实是需要使用DataSourceInitializerInvoker初始化一些数据库脚本,则可以对一些出现问题的依赖类进行加上@Lazy懒加载来处理。

相关文章:

  • AI网络爬虫:批量爬取电视猫上面的《庆余年》分集剧情
  • uniapp 快手小程序隐藏scrollbar
  • 59. UE5 RPG AI行为树的任务
  • 【AD21】BOM表文件的输出
  • 2024年ai知识库:特点、应用与搭建
  • 12、电科院FTU检测标准学习笔记-双路电源自动切换
  • SQLite数据库免改造透明加密解决方案:给数据加把锁
  • Flutter容器
  • SpheroGPT: 声控自然语言编程 AI 玩具 Demo 具身智能 图文解说 完全开源机器人
  • 【学习笔记】Windows GDI绘图(一)图形概述、直线、曲线和图形
  • Mysql与Navicat可视化命令大全 ----项目实战
  • java String的Split方法, 分割字符时,保留最后的空字符串
  • VLAN---虚拟局域网
  • 58同城如何降低 80%的机器成本 | OceanBase案例
  • Sping源码(七)—ConfigurationClassPostProcessor —— 后续处理
  • Map集合、散列表、红黑树介绍
  • MaxCompute访问TableStore(OTS) 数据
  • MD5加密原理解析及OC版原理实现
  • MySQL数据库运维之数据恢复
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • PHP 的 SAPI 是个什么东西
  • SQL 难点解决:记录的引用
  • Terraform入门 - 3. 变更基础设施
  • ucore操作系统实验笔记 - 重新理解中断
  • 聚类分析——Kmeans
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 自动记录MySQL慢查询快照脚本
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • Hibernate主键生成策略及选择
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​字​节​一​面​
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $NOIp2018$劝退记
  • ()、[]、{}、(())、[[]]命令替换
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (JS基础)String 类型
  • (第一天)包装对象、作用域、创建对象
  • (二)JAVA使用POI操作excel
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转)四层和七层负载均衡的区别
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .md即markdown文件的基本常用编写语法
  • .NET C# 使用 iText 生成PDF
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .net 微服务 服务保护 自动重试 Polly
  • .NET 中的轻量级线程安全
  • .NetCore发布到IIS
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET设计模式(8):适配器模式(Adapter Pattern)