簡單說說springboot使用yaml文件配置注入常遇到的坑

YAML是JSON的一個超集,可以非常方便地將外部配置以層次結構形式存儲起來。作爲人員來說,使用YAML文件進行配置,可以使得我們的配置看起來層次更加直觀,後期維護也比較方便,但是在使用YAML文件作爲springboot的配置文件時,也時常會遇到各種坑,今天就將這些坑做一個小彙總和記錄。

1.空格上出現的坑

首先是YAML文件是按照特定語法來解析文件的,當我們的配置文件格式出現錯誤時則會解析失敗,而做容易出錯的莫過於配置的鍵值對在冒號後還需要一個空格才能正常解析,如:
簡單說說springboot使用yaml文件配置注入常遇到的坑

在port:之後我們需要加上一個空格,然後在跟上我們的端口號3090,而且還有一種比較特殊的情況,在YAML文件中有兩種空格是不一樣的,一種是我們鍵盤輸入的空格(ASCII值是32),還有一種是不間斷空格(non-breaking space,ASCII值是160),但我們在冒號後加的空格是不間斷空格時,文件是不能被正常解析的,當然這坑不常見,一般只有在網頁直接複製的配置纔可能出現這總情況。

2. 不允許出現一樣的同級屬性

在YAML文件中是不允許出現一樣的同級屬性,就如:
簡單說說springboot使用yaml文件配置注入常遇到的坑

其中這兩個server就是同級且同名的兩個配置,是不允許的,這個問題常常在我們的配置文件比較長比較複雜時出現

3. Springboot中使用@Value注入屬性報錯

在代碼中使用@Value讀取配置文件中的配置並注入是非常方便的,但是@Value卻有他的侷限性,@Value只能注入一些簡單數據結構的數據,當我們需要讀取配置文件中的一個數組數據並注入spring boot中時,則會報錯,如下
簡單說說springboot使用yaml文件配置注入常遇到的坑

然後我們嘗試使用@Value注入customer-role.customerAllowMenuIds
簡單說說springboot使用yaml文件配置注入常遇到的坑

然後就會發現程序啓動時會報java.lang.IllegalArgumentException: Could not resolve placeholder 'customer-role.customerAllowMenuIds' in value "${customer-role.customerAllowMenuIds}"的錯誤

所以一般來說,當我們需要注入List或者數組之類的數據時,大多都是@ConfigurationProperties的方式將變量注入類的屬性中。

但是如果你決意使用@Value來注入的話也可以嘗試將配置文件中配置改變一下
簡單說說springboot使用yaml文件配置注入常遇到的坑

再使用@Value("#{'${customer-role.customerAllowMenuIds}'.split(',')}")來注入
簡單說說springboot使用yaml文件配置注入常遇到的坑

可以看到上面我們使用了spring的表達式#{},功能還是很強大的,有興趣可以深入瞭解下。它同樣可以使得我們可以很方便的使用@Value注入如Map等其他的複雜結構的數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章