当前位置:网站首页>@ConfigurationProperties使用不当引发的bug
@ConfigurationProperties使用不当引发的bug
2022-06-30 00:21:00 【-edui】
现象
平时使用自定义配置时一般都是通过@Value这种方式取配置值的,如果配置不存在或者书写有误spring就会启动报错。有一天需要自定义配置比较多,如果每个引用的地方都通过@Value获取配置的话不仅不方便管理而且很多重复的操作,比如改个名字就需要到处找然后挨个修改。已是就改用@ConfigurationProperties的方式将一堆配置统一放一个类里面管理。上线的时候将测试环境的配置拷到生产环境,因为是一样的,所以笃定没啥问题自信上线。结果一上就出问题,看日志知道ConfigurationProperties的值为空的,没取到配置文件的值。
解决
经过检查发现拷贝测试环境配置的时候由于不小心,少了一个空格,因为配置都是放到配置中心nacos的,所以没有提示,导致通过prefix匹配不到正确的值而为空。要是使用@Value的话启动就报错,不至于上线才发现问题了。因为 ** @ConfigurationProperties获取配置,如果配置不存在值就为空,@Value获取配置,如果配置不存在就会抛出异常 ** 。
扩展
@ConfigurationProperties这个注解大多数是在做自动装配时,自动获取配置文件配置属性值的,例如
从设计上来理解根据spring boot约定优于配置的理念,一般会设置默认值,所以@ConfigurationProperties获取配置应该是允许为空的。
spring boot作者估计也想到这样做估计会经常有写错的情况。所以就设计了一个元数据的概念,这些元数据能够为在配置application.yml或者application.properties时提供属性说明、默认值和自动补全。放在META-INF目录下spring-configuration-metadata.json文件中。自己项目里面的自定义配置可以编写一个这样的元数据文件,这样IDEA自动识别,写错了会提示。当然也可以通过spring-boot-configuration-processor工具自动扫描到@ConfigurationProperties注解的类生成元数据文件。例如spring boot的元数据如下
边栏推荐
- leetcode 416. Partition equal subset sum partition equal subset sum (medium)
- Quick pow: how to quickly find power
- [advanced C language] string and memory function (I)
- 视频ToneMapping(HDR转SDR)中的颜色空间转换问题(BT2020转BT709,YCbCr、YUV和RGB)
- Preliminary syntax of JS
- C MDI open subform to remove automatically generated menu bar
- 代码分析平台 SonarQube 实战
- Solr基础操作13
- 利用 CertBot 申请 Let’s Encrypt SSL 证书
- How to realize the spelling correction function in search engine
猜你喜欢

数据中台的五个关键要素

Golang6 reflection

This PMP Exam (June 25), some people are happy and others are worried. That's why

俞敏洪:我的退与进;架构师必须了解的5种最佳软件架构模式;Redis夺命52连问|码农周刊VIP会员专属邮件周报 Vol.096

Andorid source build/envsetup.sh 该知道的细节

Quick pow: how to quickly find power

Code analysis platform sonarqube actual combat

QPainter的使用入门:绘制象棋界面

项目一:部署 LAMP ecshop电商平台

Project 1: deploy lamp ECSHOP e-commerce platform
随机推荐
[QNX Hypervisor 2.2用户手册]6.2.2 Guest与Host之间通信
Majority element ii[molar voting method for finding modes]
There is no web-based development for the reward platform. Which is suitable for native development or mixed development?
QT learning 06 widgets and window types
Basic operations such as MySQL startup under Windows platform
js中的事件
Solr基础操作15
Vulnhub target -moriartycorp
Color space conversion in video tonemapping (HDR to SDR) (bt2020 to bt709, YCbCr, YUV and RGB)
Three postures of anti CSRF blasting
多数元素II[求众数类之摩尔投票法]
复制带随机指针的链表[空间换时间--hash记录]
手机开户后多久才能通过?另外,手机开户安全么?
JS绘制极坐标颜色渐变
How to write controller layer code gracefully?
Five key elements of the data center
Connection query of SQL Server database
Analysis of common vlog parameters
Table responsive layout tips for super nice
《性能之巅第2版》阅读笔记(四)--Memory监测