简单说说springboot使⽤yaml⽂件配置注⼊常遇到的坑YAML是JSON的⼀个超集,可以⾮常⽅便地将外部配置以层次结构形式存储起来。作为⼈员来说,使⽤YAML⽂件进⾏配置,可以使得
我们的配置看起来层次更加直观,后期维护也⽐较⽅便,但是在使⽤YAML⽂件作为springboot的配置⽂件时,也时常会遇到各种坑,今天就将这些坑做⼀个⼩汇总和记录。
1.空格上出现的坑
⾸先是YAML⽂件是按照特定语法来解析⽂件的,当我们的配置⽂件格式出现错误时则会解析失败,⽽做容易出错的莫过于配置的键值对在冒号后还需要⼀个空格才能正常解析,如:
在port:之后我们需要加上⼀个空格,然后在跟上我们的端⼝号3090,⽽且还有⼀种⽐较特殊的情况,在YAML⽂件中有两种空格是不⼀样的,⼀种是我们键盘输⼊的空格(ASCII值是32),还有⼀种是不间断空格(non-breaking space,ASCII值是160),但我们在冒号后加的空格是不间断空格时,⽂件是不能被正常解析的,当然这坑不常见,⼀般只有在⽹页直接复制的配置才可能出现这总情况。
2. 不允许出现⼀样的同级属性
在YAML⽂件中是不允许出现⼀样的同级属性,就如:
其中这两个server就是同级且同名的两个配置,是不允许的,这个问题常常在我们的配置⽂件⽐较长⽐较复杂时出现spring怎么读取配置
3. Springboot中使⽤@Value注⼊属性报错
在代码中使⽤@Value读取配置⽂件中的配置并注⼊是⾮常⽅便的,但是@Value却有他的局限性,@Value只能注⼊⼀些简单数据结构的数据,当我们需要读取配置⽂件中的⼀个数组数据并注⼊spring boot中时,则会报错,如下
然后我们尝试使⽤@Value注⼊customer-role.customerAllowMenuIds
然后就会发现程序启动时会报java.lang.IllegalArgumentException: Could not resolve placeholder 'customer-
role.customerAllowMenuIds' in value "${customer-role.customerAllowMenuIds}"的错误
所以⼀般来说,当我们需要注⼊List或者数组之类的数据时,⼤多都是@ConfigurationProperties的⽅式将变量注⼊类的属性中。
但是如果你决意使⽤@Value来注⼊的话也可以尝试将配置⽂件中配置改变⼀下
再使⽤@Value("#{'${customer-role.customerAllowMenuIds}'.split(',')}")来注⼊
可以看到上⾯我们使⽤了spring的表达式#{},功能还是很强⼤的,有兴趣可以深⼊了解下。它同样可以使得我们可以很⽅便的使⽤@Value注⼊如Map等其他的复杂结构的数据。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论