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

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

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

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

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

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

http://www.lryc.cn/news/352683.html

相关文章:

  • 【一步一步了解Java系列】:何为数组,何为引用类型
  • 2024年5月份最新独角数卡使用USDT详细小白教程
  • 【idea】idea2024最新版本下载_安装_破解
  • 部署CNI网络组件+k8s多master集群部署+负载均衡
  • 一个和蔼可亲的Python库,用Gooey为你的程序添加GUI
  • java抽象类,接口,枚举练习题
  • 探索Python技巧:零基础学习缩进与逻辑关系
  • 【设计模式】JAVA Design Patterns——Callback(回调模式)
  • Pandas高效数据清洗与转换技巧指南【数据预处理】
  • kafka防止消息丢失配置
  • Socket CAN中ctrlmode有哪些?
  • find 几招在 Linux 中高效地查找目录
  • 【ELK日志收集过程】
  • 设计模式—23种设计模式重点 表格梳理
  • Vue学习穿梭框Transfer组件
  • Android 项目中自定义多个 RadioButton 并排一列选择效果实现
  • 解决win系统msvcp140.dll丢失的多种常用方法,亲测有效!
  • 使用keepalived实现mysql主从复制的自动切换
  • 数据库(4)——DDL数据库操作
  • C#基础一
  • UOS1060e分离ssh与sftp服务
  • LeetCode刷题之HOT100之多数元素
  • 回溯算法06(总结+leetcode332,51,37)
  • LabVIEW图像识别的技术手段有什么?
  • Vulhub——adminer
  • MySQL之性能剖析(三)
  • spark 之数据湖
  • 记录Hbase出现HMaster一直初始化,日志打印hbase:meta,,1.1588230740 is NOT online问题的解决
  • Linux——进程信号(二)
  • 2024.5组队学习——MetaGPT(0.8.1)智能体理论与实战(下):多智能体开发