💌公众号: 猿圈奇妙屋

🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。

🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。

哈喽,小伙伴们,我是bug菌呀👀,不知不觉就一年又4月,正是踏青郊游的好时节。可上海疫情,除了在家远程办公就是看点技术顺便卷点文章。这不是4月又出了更文活动,逼自己一把,坚持每天做点内容输出,养成写作习惯,将来你会回来感谢曾经的自己坚持了一把才有此刻的辉煌成就。

小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章 点亮 👍吧,您的点赞三连( 收藏 ⭐️+ 关注 👨‍🎓+ 留言 📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,掘金不停💕,加油☘️​

二、版本说明🔥

环境:springboot2.3.2.REALSE + jdk1.8 + mysql5.6

三、报错排查🔥

这是一则典型报错。不知道有的小伙伴有没有一眼看出来,问题出在哪里?其实你看报错信息,特别是我如下圈起来的,已经非常明显了。

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'user': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'user.userName' in value "${user.userName}"

四、报错分析🔥

发生这种事其实很常见,因为项目不是一个人开发全程开发,多人线上协同,很多时候代码冲突会很常有,于是及其修改同一个配置文件,这回我刚更新远程代码,结果启动就直接报错。

如下是完整报错截图:

事故缘由很简单,那就是因为application.yaml的active没有更变,还是指定的dev配置,但是dev没有及时同步test环境的配置,所以才造成获取${user.userName} bean找不到而启动报错啦。

一般遇到这种报错,第一排查你所获取的参数是否存在于你所active指定的配置文件里,第二就是排查你获取的参数名是否与你所active指定的配置文件所定义的参数名一致。你只要排查这两步,八九不离十,就是上述这两问题造成的。

我是当前指定的是application-test.yaml配置,所以就只需要检查这个文件即可,你们依据你们的项目设定情况而定。​

五、解决方案🔥

想要解决这一问题,其实是非常简单的。如下我可以提供两种有效解决方式,仅供参考。方式二虽是解决该启动不报错,但并不是非常优雅的。

1️⃣方式一

配置文件中,加上对应报错的那几个全局变量。比如我如下报错就是指没有默认值。配置文件这一块由于切换active 没有同步,test环境上没有这一块变量。于是才报错。

在我指定的配置文件application-test.yaml 中添加该参数。

user:
  userName: 张三
  sex: 
  age: 18

如上即可解决该报错问题。启动正常!

2️⃣方式二

       在一般配置的时候,都会给定参数默认值。虽然也能有效避免你配置文件不存在变量时报错的事故发生。

    @Value("${user.userName:张三}")
    private String userName;
    @Value("${user.sex:男}")
    private String sex;
    @Value("${user.age:18}")
    private Integer age;

实际设置截图:仅供参考

       总结:其实是两种方案结合起来才是最真的写法。以防万一配置忘了加或者active切换没有及时同步而导致报错比采用读取默认配置的方式代价要大,所以一般在配置全局变量时,都是会给定变量默认值,但一定要给定有意义的变量默认值,好在第一时间能提醒被排查到是默认变量在启用效果。

​... ...

       ok,以上这样就好啦,如果还想学习更多,你可以看看我的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬的。好啦,咱们下期见~

六、往期推荐🔥

springboot之jar包Linux后台启动部署及滚动日志查看且日志输出至文件保存

Springboot系列(十六):集成easypoi实现Excel导出

Springboot系列(十六):集成easypoi实现单word模板导出多页面

Springboot系列(十六):集成easypoi实现word模板内循环导出多数据

Springboot系列(十六):集成easypoi实现word模板图片导出

Springboot系列(十六):集成easypoi实现excel多sheet表导入

Springboot系列(十六):集成easypoi实现excel多sheet表导出

七、文末🔥

       如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《SpringBoot零基础入门》,从无到有,从零到一!希望能帮到大家。

       我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

最后送大家两句我很喜欢的话,与诸君共勉!

**************************************************

☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以start,

🍀你能从现在开始改变,也可以一成不变,这件事,没有规矩可言,你可以活出最精彩的自己。

**************************************************

💌如果文章对您有所帮助,就请留下您的吧!(#^.^#);

💝如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;

💗如果对文章有任何疑问,还请文末留言或者加群吧【QQ交流群:708072830】;

💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);

厨子学编程
私信
 1,572