Spring如何利用@Value注解讀取yml中的map配置
@Value注解讀取yml中的map配置
網(wǎng)上查了好多資料,都是.properties文件中讀取,而且又是幾個人抄來抄去,找了半天功夫不負有心人,終于找到了詳盡的用法介紹。
下邊是我在yml中的map寫法
test: ? map: '{"test1":"12345","test2":"54321"}'
使用時候注解的寫法
? ? @Value("#{${test.map}}") ? ? private Map<String,String> mapKey;
如果是.properties文件寫法很不一樣。
還有一種使用方法時創(chuàng)建一個類,使用@ConfigurationProperties注解,
舉個例子
yml文件的寫法:
test: ? map:? ? ?? ?key1: 12345 ? ?? ?key2: 54321
新建類的寫法:
package com.sohu.umab.backendoperation.vo; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.Map; @Data @Component @ConfigurationProperties(prefix = "test") public class AppKey { //此處屬性名必須和yml文件中的保持一致,否則讀取不到 ? ? private Map map = new HashMap(); }
然后在使用的地方,直接注入你創(chuàng)建的類即可,這種方法缺點就是,之后每增加一個配置map,你就需要改這個類,耦合性高,不太靈活,推薦使用注解的方式。
參考的學習文章:
這兩篇讓我受益匪淺呀,特別是第一篇文章!
注意:
@Value注解寫在靜態(tài)變量上邊是不起作用的,
@Value("#{${appKey.map}}") ? ? private static Map<String, String> appkeyMap;
debug模式下可以看到,appkeyMap為空,想要對靜態(tài)變量進行賦值,需要用到set函數(shù),可以參考下邊這篇文章@Value對靜態(tài)變量賦值
spring注解@Value通過yml文件注入map
yml文件
app: ?map: "{-1: "發(fā)送失敗",0: "未發(fā)送",1: "發(fā)送成功"}"
java代碼注入
@Value("#{${app.map}}") private Map<String,String> map;
注意:要注入配置文件值的類,必須是spring的組件,可以用@Component或者是@Service、@Controller等注解的類都可以注入,普通java bean是不能注入值的
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
IntelliJ IDEA中Scala、sbt、maven配置教程
這篇文章主要介紹了IntelliJ IDEA中Scala、sbt、maven配置教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09Spring多數(shù)據(jù)源導(dǎo)致配置失效的解決
這篇文章主要介紹了Spring多數(shù)據(jù)源導(dǎo)致配置失效的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01Java concurrency之集合_動力節(jié)點Java學院整理
Java集合主體內(nèi)容包括Collection集合和Map類;而Collection集合又可以劃分為List(隊列)和Set(集合),有需要的小伙伴可以參考下2017-06-06