记一次Bean 异常错误 NoSuchBeanDefinitionException,及问题解决思路
解决思路
1. 项目启动时在Bean处打断点,确定是否有初始化
2. 启动后可以根据相关Bean获取工具类查询Spring容器中是否存在该bean
3. 确定Bean是否存在依赖以及先后顺序
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'cn.hutool.extra.mail.MailAccount' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:351)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:342)
at (MailUtils.java:31)
... 64 common frames omitted
问题描述
一次项目开发中使用了hutool-extra
工具类中的邮件模块负责发送邮件,始终获取不到MailAccount这个Bean,但是很奇怪的是工具类是在一个公共的包中,另外一个模块的服务依赖该包后能够正确生成该Bean。一时间不知道问题出在了哪里,再加上其他烦心事一下子慌乱不知所以做了很多无用功。
如果是通过Bean 注解注入的!!!!!打断点测试!!!!!
通过打断点发现,并没有走到Bean 的实例化逻辑中去,结合@ConditionalOnProperty()
注解 应该是mail.enabled
这个配置的值不为true,但是问题是项目中的配置是通过Nacos配置中心实现的公共配置,另一个项目又能正确读取到该配置,说明配置是没有问题的,那么唯一的可能就是没有获取到Nacos中的配置! !
通过启动日志发现,项目启动时读取的配置为默认组的配置,至此恍然大悟!!! 默认组中时没有开启邮件这个配置的
修改配置后成功解决!!!!
总结
最重要的还是要有解决问题的思路,分析问题的本质再着手去解决问题!!不要遇到问题就面向Google开发!!