您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“springboot從application.properties中注入list和map方式是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“springboot從application.properties中注入list和map方式是什么”吧!
在配置類中,從application.properties中讀取一個(gè)復(fù)雜list。如List<Person>或者初始化一個(gè)map
@Configuration @Component @ConfigurationProperties(prefix = "datahub") public class Config { private List<DatahubParam> datahubParams; private Map<String, Object> map; public void setMap(Map<String, Object> map) { this.map = map; } public Map<String, Object> getMap() { return map; } public List<DatahubParam> getDatahubParams() { return datahubParams; } public void setDatahubParams(List<DatahubParam> datahubParams) { this.datahubParams = datahubParams; } }
DatahubParam.java:
public class DatahubParam { private String project; private String topic; private String subId; private String shardId; @Override public String toString() { return "{project: " + project + ", topic: " + topic + ", subId: " + subId + ", shardId: " + shardId + "}"; } public String getProject() { return project; } public void setProject(String project) { this.project = project; } public String getTopic() { return topic; } public void setTopic(String topic) { this.topic = topic; } public String getSubId() { return subId; } public void setSubId(String subId) { this.subId = subId; } public String getShardId() { return shardId; } public void setShardId(String shardId) { this.shardId = shardId; } }
application.properties:
datahub.datahub-params[0].project = project-0 datahub.datahub-params[0].topic = topic-0 datahub.datahub-params[0].sub-id = subId-0 datahub.datahub-params[0].shard-id = shardId-0 datahub.datahub-params[1].project = project-1 datahub.datahub-params[1].topic = topic-1 datahub.datahub-params[1].sub-id = subId-1 datahub.datahub-params[1].shard-id = shardId-1 datahub.map.username=uwei datahub.map.age=22 datahub.map.salary=15000
@RunWith(SpringRunner.class) @SpringBootTest public class HelloTest { @Autowired Config config; @Test public void test(){ System.out.println(config.getDatahubParams()); System.out.println(config.getMap()); } }
運(yùn)行結(jié)果:
配置list,map(list內(nèi)含對(duì)象)多層嵌套問(wèn)題,注入對(duì)象失敗,無(wú)法加載到配置文件
繼SpringBoot使用@Value無(wú)法賦值之后,kimball又遇到一個(gè)application.properties配置注入問(wèn)題,可能作為新手,這里該踩得坑都掉下去了~真是一踩一個(gè)準(zhǔn)。
application.properties配置注入出現(xiàn)錯(cuò)誤,配置list,map(list內(nèi)含對(duì)象)多層嵌套問(wèn)題,注入對(duì)象失敗,無(wú)法加載到配置文件。后詢問(wèn)多方大神,仍無(wú)法加載,那么自己慢慢測(cè)試吧。
我的目錄結(jié)構(gòu)是這樣:對(duì)象建立了postinfolist>postinfo>header三層結(jié)構(gòu),header內(nèi)含Map鍵值對(duì),postinfolist是postinfo的List集合,故也算是個(gè)多層嵌套的格式。一開始我的配置如下:
大概情況應(yīng)該是描述清楚了吧,下面我們來(lái)分析沒(méi)有加載到配置文件的錯(cuò)誤原因及分析方法。
作為freshman,我只是一步步驗(yàn)證,既然加載不到這么多層,那么我從最低層header驗(yàn)證,單獨(dú)配置了下header,header.headerMap.AppKey=xxx(header prefix注意修改),結(jié)果加載到了,那么好,說(shuō)明不是配置文件加載啊或是引入啊什么的問(wèn)題,應(yīng)該是多層嵌套自己寫的有誤。
那么第二步,往上一層,配置postinfo.header.headerMap.AppKey=xxx(prefix對(duì)應(yīng)修改,不在多說(shuō)),又加載到了,那么可以知道問(wèn)題所在了,配置postinfolist時(shí),List這塊兒配置的不正確。這樣一步步排查,我們可以找到問(wèn)題所在,所以有問(wèn)題,先想排查方法,找到問(wèn)題所在就可以迎刃而解,本質(zhì)有點(diǎn)像方法論~
那么再回看這個(gè)配置文件,此時(shí)對(duì)application.properties的配置也有點(diǎn)領(lǐng)悟了,實(shí)際上就是 自上而下的表達(dá)出你要注入的參數(shù),也就是我的上層postinfolist(Springboot幫我們注入時(shí)先找這個(gè)最上級(jí)),而后一點(diǎn)一點(diǎn)往后去找對(duì)應(yīng)關(guān)系,也就是先找到對(duì)象內(nèi)的postinfolist這個(gè)List集合,即對(duì)象的成員變量,那么配置我們就可以寫postinfolist.postinfolist獲得了List集合,而后要表達(dá)集合里的postinfo,postinfolist.postinfolist[0],即相當(dāng)于list.get(0),這么來(lái)看是不是很容易理解application的配置文件寫法了,而后再逐層表示到你要注入的參數(shù)即可,也就是postinfolist.postinfolist[0].header.headerMap.AppKey,之前的寫法只是覺(jué)得是對(duì)應(yīng)上prefix的前綴就可以讀到了,而其實(shí)Springboot為我們做的更多,將你寫的對(duì)象通過(guò)一步步層級(jí)關(guān)系來(lái)分析注入,也算是新人對(duì)Springboot的一點(diǎn)敬仰吧,之前接觸過(guò)一段ssh,那是一段痛苦的歷程,很多東西要自己配置,而springboot真是讓我們把重心放在開發(fā)功能上而不是繁瑣的配置文件上。
到此,相信大家對(duì)“springboot從application.properties中注入list和map方式是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。