今天在運行項目時想直接把yml文件中的一個數組注入到java類的一個對象上,結果怎么弄都不通過
一直都在用Spring的@Value注解讀取yml中的配置,這兩天在讀取配置的時候,想讀取yml中配置的一個數組,通過@Vaule一直獲取不到,通過一番資料的查詢,才徹底清楚了@Vaule的使用情況。
在Spring中讀取配置文件的快捷方法常見的有兩種,一個是通過@Vaule注解進行單一字段的注入,另外一種方法就是通過@ConfigurationProperties注解來進行批量注入。
@ConfigurationProperties注解屬於SpringBoot,不在SpringFramework里面
這兩種注入方式各有自己的優勢和使用場景。
@Value | @ConfigurationProperties | |
---|---|---|
使用場景 | 單一屬性注入,注解寫在類的屬性上 | 批量注入,注解寫在類上 |
松散語法 | 不支持 | 支持 |
SpEL | 支持 | 不支持 |
JSR303數據校驗@Validated | 不支持 | 支持 |
復雜類型封裝(數組、Map、對象等) | 不支持 (這么說不嚴謹) | 支持 |
出問題的注入方式
報錯:java.lang.IllegalArgumentException: Could not resolve placeholder 'list' in value "${list}"
正確的注入方式:(yml文件都是application.yml不是自定義的yml)
1.@ConfigurationProperties(prefix = "dog")(這里的dog與yml文件中的dog相對應)