使用了@Bean启动成功还能注入失败?秒级解决 定位分析

news2024/9/25 3:22:13

文章目录

    • @Bean 断点跟不进去
    • 为什么需要多个同类型bean
    • 怎么友好处理同类型bean【任选一种】
    • 彩蛋

@Bean 断点跟不进去

结论:你的其他代码 或者底层依赖,一定有改类型的自动注入代码,在Spring 机制中,默认拒绝Bean重写,你一定遇到启动失败之后有这样的建议


Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

对于这样的建议,强烈建议不要听取spring的建议,不要设置allow-bean-definition-overriding这个配置否则很多问题都会导致bean的创建并没有按你期望的执行,而且在运行期间才暴露,在生产环境肯定会有一定影响。除了这个影响就是你以为自动注入成功了,实际上断点都过不去!!这种离奇事件都是因为放开导致的,如果不放开,spring才会自动帮你检查出来

不要跟我说指定Bean顺序就好了,这个放开就是后续所有的问题都因为被默认放开而难以排查,如果你的项目是个人维护还好,换一个人你就是坑主!
最可怕的是当很多人维护后都重写过相同bean定义,并且覆盖了bean也能满足需求,有些新手还不懂而庆幸解决了,而到其中一个人真正发现需要同时用多个bean定义时,必须要还原这个默认配置时, 各种报错 让他头皮发麻

那么到底是为什么会出现这个问题,因为Spring源码中所有的bean在创建前都是放在DefaultListableBeanFactory#beanDefinitionBeanMap属性中key是beanName,因此如果你的beanName相同,就会被检测出来【前提没有改上述配置】

为什么需要多个同类型bean

在实际复杂的业务场景,配置多个数据源包括不限制于【DB、ES、Kafka、MQ】都有可能是多套并行在某个业务中,这时候注入多个同类型bean是必不可免的

怎么友好处理同类型bean【任选一种】

一定要按name区分好你的多个同类bean作为前提

  1. 不要单纯使用@Autowire,要配合@Qualified,实时上官方都建议使用@Resource,默认基于byName查询
  2. 使用map注入,这也是ok的
@Resource private Map<String,DataSource> dataSourceMap; 
# 这个好处是你可以按需取出你在某个场景需要的bean,非常方便
  1. Spring4.3 以后支持了ObjectProvider 这种方式在构造参数、方法参数根据自动注入使用也很方便,其带排序的迭代器相当不错,处理多个bean也是非常友好的

彩蛋

各位路过大佬平时怎么看源码中bean的创建呢?假如你找了半天都没找到Bean的定义该怎么办?例如接入dynamic-database时,默认注入了ShardingDatasource,单独靠链接or全局搜索根本找不到

没搜到是因为某个依赖需要下载源码,默认你都不知道在哪自然不知道该怎么下载,除非你这个依赖源码安装,这样肯定不是最好的

幸运的是有个通用法则:
例如我不知道ShardingDataSource在什么时候创建的,可以通过临时实现是一个BeanPostProcessor,注入到配置中,然后去拦截对应的bean父接口类型,打一个断点

在这里插入图片描述

这时候会在idea启动时跟踪到这,然后你只需要点击debug 面板 找到doCreateBean 的地方查看对应mbd属性 找到FactoryMethodMetaData ->declareClassName 即可知道Bean 的来源如下:
在这里插入图片描述
定位发现datasource的创建来源是org.apache.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration
点进去完美定位到目标Bean的创建过程

在这里插入图片描述

这个方法是万能的,笔者经常使用该方式解决疑难问题

授之以渔持续更新,敬请期待!!

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

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

相关文章

2024年一区SCI-极光优化算法 Polar Lights Optimization-附Matlab免费代码

引言 本期介绍了一种名为极光优化算法 Polar Lights Optimization (PLO)的元启发式算法。极光是一种独特的自然奇观&#xff0c;当来自太阳风的高能粒子在地磁场和地球大气层的影响下汇聚在地球两极时&#xff0c;就会发生极光。该成果于2024年8月最新发表在国际顶级JCR 1区、…

python画图|3D直方图基础教程

前述已经完成了直方图和3D图的基本学习&#xff0c;链接如下&#xff1a; 直方图&#xff1a;python画图|水平直方图绘制-CSDN博客 3D图&#xff1a;python画图|水平直方图绘制-CSDN博客 现在我们尝试把二者结合&#xff0c;画3D直方图。 【1】官网教程 首先&#xff0c;依…

微信开放标签【wx-open-launch-weapp】使用方法,亲测好用

如果你按照微信开放标签的文档来集成&#xff0c;那么恭喜你&#xff0c;绝对&#xff08;99%&#xff09;报错&#xff0c;今天在这里给大家演示一下在vue3中正确使用wx-open-launch-weapp的方法。 第一步&#xff1a; 配置wx.config&#xff0c;这个就不过多介绍了&#xff…

上海宝钢阿赛洛引领“绿能革命”:二期屋顶光伏项目赋能“双碳”目标新篇章

在“双碳”战略的宏伟蓝图下&#xff0c;一场能源革命的浪潮正席卷而来&#xff0c;分布式光伏以其独特的魅力成为这场变革中的璀璨明星。上海宝钢阿赛洛激光拼焊有限公司积极响应国家号召&#xff0c;携手上海宝钢节能环保技术有限公司&#xff0c;于近日宣布其屋顶光伏发电项…

SpringSecurity原理解析(五):HttpSecurity 类处理流程

1、SpringSecurity 在spring boot中与SSM项目中基于配置文件的区别 通过前边的笔记我们可以知道&#xff0c;在传统的SSM项目中 SpringSecurity的使用是基于配置文件 的&#xff0c;然后spring 容器初始化的时候将 SpringSecurity 中的各种标签解析成对应的Bean对象&#xff0c…

Cortex-M3架构学习:

异常类型 Cortex-M3 在内核水平上搭载了一个异常响应系统&#xff0c;支持为数众多的系统异常和外部中断。其 中&#xff0c;编号为 1 &#xff0d; 15 的对应系统异常&#xff0c;大于等于 16 的则全是外部中断。 Cortex-M3支持的中断源数目为 240 个&#xff0c;做成芯片后…

TensorFlow深度学习框架改进K-means、SOM自组织映射聚类算法及上海招生政策影响分析研究|附代码数据

全文链接&#xff1a;https://tecdat.cn/?p37652 原文出处&#xff1a;拓端数据部落公众号 分析师&#xff1a;Chen Zhang 在教育政策研究领域&#xff0c;准确评估政策对不同区域和学生群体的影响至关重要。2021 年上海市出台的《上海市初中学业水平考试实施办法》对招生…

PDF转Excel小达人养成记

在现代职场&#xff0c;数据管理与格式转换可谓是日常任务的重头戏&#xff1b;有时我们手头有一份PDF文件&#xff0c;但需要将其中的数据整理成Excel表格&#xff0c;这该如何是好&#xff1f;别急&#xff0c;今天我就来给大家介绍几款好用的PDF转Excel工具&#xff0c;以及…

使用您自己的图像微调 FLUX.1 LORA 并使用 Azure 机器学习进行部署

目录 介绍 了解 Flux.1 模型系列 什么是 Dreambooth&#xff1f; 先决条件 使用 Dreambooth 微调 Flux 的步骤 步骤 1&#xff1a;设置环境 第 2 步&#xff1a;加载库 步骤 3&#xff1a;准备数据集 3.1 通过 AML 数据资产&#xff08;URI 文件夹&#xff09;将图像上传到…

minio集群

1 集群部署 minio集群的搭建并不复杂&#xff0c;别人也有很多的例子&#xff0c;这里只是先把自己的集群搭建记录下来&#xff0c;重点是后面的章节&#xff0c;遇到问题如何解决。 1.1 修改主机名 hostnamectl set-hostname minio1 hostnamectl set-hostname minio2 hostna…

【深度学习】训练过程中一个OOM的问题,太难查了

现象&#xff1a; 各位大佬又遇到过ubuntu的这个问题么&#xff1f; 现象是在训练过程中&#xff0c;ssh 上不去了&#xff0c;能ping通&#xff0c;没死机&#xff0c;但是ubunutu 的pc侧的显示器&#xff0c;鼠标啥都不好用了。只能重启。 问题原因&#xff1a; OOM了95G&a…

【C++】C++11-基础

目录 1、统一的列表初始化 1.1 {}初始化 1.2 std::initializer_list 2、声明 2.1 auto 2.2 decltype 2.3 nullptr 3、范围for 4、智能指针 5、STL中的一些变化 5.1 新容器 5.2 新方法 1、统一的列表初始化 1.1 {}初始化 在C98中&#xff0c;标准允许使用花括号{}…

光伏发电量如何计算?

真实光伏发电情况&#xff0c;需要根据几十种复杂因素&#xff0c;再通过鹧鸪云算法&#xff0c;快速计算出实际发电量情况。 1、自研算法&#xff0c;技术创新引领未来 鹧鸪云光伏发电量自研算法&#xff0c;是研发团队历经8个月&#xff0c;基于深度学习、大数据分析等前沿技…

Aqara澳门体验店开业 品牌实力与市场前景备受瞩目

在全球经济持续波动的背景下&#xff0c;许多品牌选择采取保守策略。然而&#xff0c;Aqara却还能稳步前行&#xff0c;展现出了强劲的发展势头。7月20日&#xff0c;Aqara在澳门市场迈出了重要一步&#xff0c;开设了该地区首家标准4S智能家居体验馆。这一战略性的布局不仅凸显…

跟《经济学人》学英文:2024年09月07日这期 Can IKEA disrupt the furniture business again?

Can IKEA disrupt the furniture business again? It wants to help you sell your Billy bookcase disrupt&#xff1a; 颠覆&#xff0c;彻底改变 这里的 “disrupt” 是指“颠覆”或“彻底改变”某个行业或市场的现有运作方式&#xff0c;通常通过引入创新的做法或技术来…

Django-Celery-Flower实现异步和定时爬虫及其监控邮件告警

1 Django中集成celery # Django --->python 的web框架-web项目--》用浏览器访问 # celery--->分布式异步任务框架-定时任务-延迟任务-异步任务1.1 安装模块 #官方文档&#xff1a;https://docs.celeryq.dev/en/stable/django/first-steps-with-django.htmlpip install …

JavaEE:文件内容操作(二)

文章目录 文件内容操作读文件(字节流)read介绍read() 使用read(byte[] b) 使用 read(byte[] b, int off, int len) 使用 写文件(字节流)write介绍write(int b) 使用write(byte[] b) 使用write(byte[] b, int off, int len) 使用 读文件(字符流)read() 使用read(char[] cbuf) 使…

[产品管理-6]:NPDP新产品开发 - 4 - 战略 - 创新支持战略,支持组织的总体创新战略(平台战略、技术战略、营销战略、知识产权战略、能力建设战略)

目录 一、创新支持战略概述 二、平台战略&#xff1a;大平台小产品战略 2.1 概述 1、平台战略的定义 2、平台战略的特点 3、平台战略的应用领域 4、平台战略的成功案例 5、平台战略的发展趋势 2.2 大平台小产品战略 1&#xff09;大平台的建设 2&#xff09;、小产品…

day-53 两个线段获得的最多奖品

思路 dp[right] 表示右端点不超过 prizePositions[right] 的线段可以覆盖最大奖品数量&#xff0c;然后枚举后面一条线段的右端点&#xff08;第一条线段在第二条线段左边&#xff09;&#xff0c;第二条线段的长度可以表示为right-left1;第一条线段的长度可以表示dp[left] 解…

MINICPM-V2_6图像得到embedding-代码解读

目的 基于上一篇MINICPM-V2_6图像预处理流程-代码解读将输入图片得到了input_ids、attention_mask、pixel_values、image_sizes、image_bound、tgt_sizes&#xff0c;但是要怎么通过这些得到图片对应的embedding呢&#xff1f; 这里接着从MINICPM-V2_6入手&#xff0c;了解如何…