最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot從application.properties中注入list,?map方式

 更新時(shí)間:2021年11月29日 09:49:05   作者:uweii  
這篇文章主要介紹了springboot從application.properties中注入list,map方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

需求

在配置類中,從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

測(cè)試類

@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é)果:

application.properties配置注入出現(xiàn)錯(cuò)誤

配置list,map(list內(nèi)含對(duì)象)多層嵌套問題,注入對(duì)象失敗,無法加載到配置文件

繼SpringBoot使用@Value無法賦值之后,kimball又遇到一個(gè)application.properties配置注入問題,可能作為新手,這里該踩得坑都掉下去了~真是一踩一個(gè)準(zhǔn)。

問題描述

application.properties配置注入出現(xiàn)錯(cuò)誤,配置list,map(list內(nèi)含對(duì)象)多層嵌套問題,注入對(duì)象失敗,無法加載到配置文件。后詢問多方大神,仍無法加載,那么自己慢慢測(cè)試吧。

我的目錄結(jié)構(gòu)是這樣:對(duì)象建立了postinfolist>postinfo>header三層結(jié)構(gòu),header內(nèi)含Map鍵值對(duì),postinfolist是postinfo的List集合,故也算是個(gè)多層嵌套的格式。一開始我的配置如下:

大概情況應(yīng)該是描述清楚了吧,下面我們來分析沒有加載到配置文件的錯(cuò)誤原因及分析方法。

作為freshman,我只是一步步驗(yàn)證,既然加載不到這么多層,那么我從最低層header驗(yàn)證,單獨(dú)配置了下header,header.headerMap.AppKey=xxx(header prefix注意修改),結(jié)果加載到了,那么好,說明不是配置文件加載啊或是引入啊什么的問題,應(yīng)該是多層嵌套自己寫的有誤。

那么第二步,往上一層,配置postinfo.header.headerMap.AppKey=xxx(prefix對(duì)應(yīng)修改,不在多說),又加載到了,那么可以知道問題所在了,配置postinfolist時(shí),List這塊兒配置的不正確。這樣一步步排查,我們可以找到問題所在,所以有問題,先想排查方法,找到問題所在就可以迎刃而解,本質(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),這么來看是不是很容易理解application的配置文件寫法了,而后再逐層表示到你要注入的參數(shù)即可,也就是postinfolist.postinfolist[0].header.headerMap.AppKey,之前的寫法只是覺得是對(duì)應(yīng)上prefix的前綴就可以讀到了,而其實(shí)Springboot為我們做的更多,將你寫的對(duì)象通過一步步層級(jí)關(guān)系來分析注入,也算是新人對(duì)Springboot的一點(diǎn)敬仰吧,之前接觸過一段ssh,那是一段痛苦的歷程,很多東西要自己配置,而springboot真是讓我們把重心放在開發(fā)功能上而不是繁瑣的配置文件上。

最后,不知道有沒有解決到同樣遇到配置問題注入的你,自己慢慢發(fā)現(xiàn)其中的問題對(duì)于理解新鮮事物有著很大的幫助,戒驕戒躁。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • git stash 和unstash的使用操作,git unstash failed

    git stash 和unstash的使用操作,git unstash failed

    這篇文章主要介紹了git stash 和unstash的使用操作,git unstash failed,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java集合ArrayList與LinkedList詳解

    Java集合ArrayList與LinkedList詳解

    這篇文章主要介紹了Java集合ArrayList與LinkedList詳解,對(duì)于ArrayList和LinkedList,他們都是List接口的一個(gè)實(shí)現(xiàn)類,并且我們知道他們的實(shí)現(xiàn)方式各不相同,例如ArrayList底層實(shí)現(xiàn)是一個(gè)數(shù)組
    2022-08-08
  • Java移除無效括號(hào)的方法實(shí)現(xiàn)

    Java移除無效括號(hào)的方法實(shí)現(xiàn)

    本文主要介紹了Java移除無效括號(hào)的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java使用代碼模擬高并發(fā)操作的示例

    Java使用代碼模擬高并發(fā)操作的示例

    本篇文章主要介紹了Java使用代碼模擬高并發(fā)操作的示例,Java通過代碼模擬高并發(fā)可以以最快的方式發(fā)現(xiàn)我們系統(tǒng)中潛在的線程安全性問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • java實(shí)現(xiàn)多人聊天工具(socket+多線程)

    java實(shí)現(xiàn)多人聊天工具(socket+多線程)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)多人聊天工具,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java如何讀取XML文件 具體實(shí)現(xiàn)

    Java如何讀取XML文件 具體實(shí)現(xiàn)

    這篇文章主要介紹了Java如何讀取XML文件 具體實(shí)現(xiàn),有需要的朋友可以參考一下
    2013-12-12
  • IDEA+Maven搭建JavaWeb項(xiàng)目的方法步驟

    IDEA+Maven搭建JavaWeb項(xiàng)目的方法步驟

    本文主要介紹了IDEA+Maven搭建JavaWeb項(xiàng)目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java內(nèi)部類的使用教程詳解

    Java內(nèi)部類的使用教程詳解

    在Java中,有些類可以被定義在另一個(gè)類的內(nèi)部,我們把在一個(gè)類里面定義的類稱為內(nèi)部類。本文主要介紹了Java內(nèi)部類的使用,需要的可以參考一下
    2023-04-04
  • JAVA集合框架工具類自定義Collections集合方法

    JAVA集合框架工具類自定義Collections集合方法

    今天小編就為大家分享一篇關(guān)于JAVA集合框架工具類自定義Collections集合方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • SpringBoot定時(shí)任務(wù)多線程實(shí)現(xiàn)示例

    SpringBoot定時(shí)任務(wù)多線程實(shí)現(xiàn)示例

    在真實(shí)的Java開發(fā)環(huán)境中,我們經(jīng)常會(huì)需要用到定時(shí)任務(wù)來幫助我們完成一些特殊的任務(wù),本文主要介紹了SpringBoot定時(shí)任務(wù)多線程實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評(píng)論

抚顺市| 昆山市| 孙吴县| 景德镇市| 嘉定区| 杂多县| 琼结县| 长泰县| 三门县| 南宫市| 永州市| 喀喇沁旗| 久治县| 靖宇县| 门源| 胶南市| 白水县| 漠河县| 湘阴县| 宁远县| 萨嘎县| 从江县| 佛坪县| 奇台县| 航空| 大丰市| 油尖旺区| 白城市| 色达县| 鄯善县| 壶关县| 沙田区| 双桥区| 滨州市| 常熟市| 九龙县| 龙门县| 平遥县| 于都县| 永丰县| 上高县|