亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot如何讀取配置文件中的數(shù)據(jù)到map和list

 更新時(shí)間:2022年02月22日 16:20:39   作者:eknown  
這篇文章主要介紹了SpringBoot如何讀取配置文件中的數(shù)據(jù)到map和list,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

讀取配置文件中的數(shù)據(jù)到map和list

之前使用過(guò)@Value("${name}")來(lái)讀取springboot配置文件中的配置信息,比如:

@Value("${server.port}")
private Integer port;

后面遇到一個(gè)新問(wèn)題,如果我要把配置文件中的一系列數(shù)據(jù)一下子讀出來(lái)到同一個(gè)數(shù)據(jù)結(jié)構(gòu)中怎么辦呢?

比如說(shuō)讀取配置信息到map或者list

下面來(lái)講述一下如何實(shí)現(xiàn)這個(gè)功能。

springboot讀取配置文件中的配置信息到map

首先看配置文件要讀到map中的信息:

test:
? limitSizeMap:
? ? baidu: 1024
? ? sogou: 90
? ? hauwei: 4096
? ? qq: 1024

接著我們需要再maven的pom.xml文件中添加如下依賴(lài):

<dependency>
? <groupId>org.springframework.boot</groupId>
? <artifactId>spring-boot-configuration-processor</artifactId>
? <optional>true</optional>
</dependency>

然后定義一個(gè)配置類(lèi),代碼如下:

package com.eknows.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
/**
 * 配置類(lèi)
 * 從配置文件中讀取數(shù)據(jù)映射到map
 * 注意:必須實(shí)現(xiàn)set方法
 * @author eknows
 * @version 1.0
 * @since 2019/2/13 9:23
 */
Configuration
ConfigurationProperties(prefix = "test")
EnableConfigurationProperties(MapConfig.class)
public class MapConfig {
    /**
     * 從配置文件中讀取的limitSizeMap開(kāi)頭的數(shù)據(jù)
     * 注意:名稱(chēng)必須與配置文件中保持一致
     */
    private Map<String, Integer> limitSizeMap = new HashMap<>();
    public Map<String, Integer> getLimitSizeMap() {
        return limitSizeMap;
    }
    public void setLimitSizeMap(Map<String, Integer> limitSizeMap) {
        this.limitSizeMap = limitSizeMap;
    }
}

這樣,我們就可以把配置文件中的數(shù)據(jù)以map形式讀出來(lái)了,key就是配置信息最后一個(gè)后綴,value就是值。

測(cè)試代碼請(qǐng)看文章最后。

springboot讀取配置文件中的配置信息到list

首先看配置文件要讀到list中的信息:

test-list:
? limitSizeList[0]: "baidu: 1024"
? limitSizeList[1]: "sogou: 90"
? limitSizeList[2]: "hauwei: 4096"
? limitSizeList[3]: "qq: 1024"

接著如上添加spring-boot-configuration-processor依賴(lài)項(xiàng)。

然后定義配置類(lèi),代碼如下:

package com.eknows.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.List;
/**
 * 配置類(lèi)
 * 從配置文件中讀取數(shù)據(jù)映射到list
 * @author eknows
 * @version 1.0
 * @since 2019/2/13 9:34
 */
Configuration
@ConfigurationProperties(prefix = "test-list") // 不同的配置類(lèi),其前綴不能相同
@EnableConfigurationProperties(ListConfig.class) // 必須標(biāo)明這個(gè)類(lèi)是允許配置的
public class ListConfig {
    private List<String> limitSizeList = new ArrayList<>();
    public List<String> getLimitSizeList() {
        return limitSizeList;
    }
    public void setLimitSizeList(List<String> limitSizeList) {
        this.limitSizeList = limitSizeList;
    }
}

測(cè)試上述配置是否有效

編寫(xiě)測(cè)試類(lèi):

package com.eknows;
import com.eknows.config.ListConfig;
import com.eknows.config.MapConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
import java.util.Map;
/**
 * @author eknows
 * @version 1.0
 * @since 2019/2/13 9:28
 */
@SpringBootTest
@RunWith(SpringRunner.class)
public class ConfigTest {
    @Autowired
    private MapConfig mapConfig;
    @Autowired
    private ListConfig listConfig;
    @Test
    public void testMapConfig() {
        Map<String, Integer> limitSizeMap = mapConfig.getLimitSizeMap();
        if (limitSizeMap == null || limitSizeMap.size() <= 0) {
            System.out.println("limitSizeMap讀取失敗");
        } else {
            System.out.println("limitSizeMap讀取成功,數(shù)據(jù)如下:");
            for (String key : limitSizeMap.keySet()) {
                System.out.println("key: " + key + ", value: " + limitSizeMap.get(key));
            }
        }
        System.out.println("------");
        List<String> limitSizeList = listConfig.getLimitSizeList();
        if (limitSizeList == null || limitSizeList.size() <= 0) {
            System.out.println("limitSizeList讀取失敗");
        } else {
            System.out.println("limitSizeList讀取成功,數(shù)據(jù)如下:");
            for (String str : limitSizeList) {
                System.out.println(str);
            }
        }
    }
}

運(yùn)行測(cè)試類(lèi),發(fā)現(xiàn)控制臺(tái)輸出如下:

limitSizeMap讀取成功,數(shù)據(jù)如下:
key: qq, value: 1024
key: baidu, value: 1024
key: sogou, value: 90
key: hauwei, value: 4096
------
limitSizeList讀取成功,數(shù)據(jù)如下:
baidu: 1024
sogou: 90
hauwei: 4096
qq: 1024

配置文件的讀?。ò╨ist、map類(lèi)型)

添加配置文件處理器的依賴(lài),這樣在編寫(xiě)配置文件的時(shí)候就會(huì)有提示了。

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <version>2.1.3.RELEASE</version>
        </dependency>

有了依賴(lài),可以直接使用application.properties文件為我們工作了,這是Springboot的默認(rèn)文件,它會(huì)通過(guò)其機(jī)制讀取到上下文中,這樣就可以引用它了

讀取配置文件

在使用maven項(xiàng)目中,配置文件會(huì)放在resources根目錄下。

我們的springBoot是用Maven搭建的,所以springBoot的默認(rèn)配置文件和自定義的配置文件都放在此目錄。

springBoot的 默認(rèn)配置文件為 application.properties 或 application.yml,這里我們使用 application.properties。

首先在application.properties中添加我們要讀取的數(shù)據(jù)。

server.port = 8081
custom.name = lonewalker
custom.age = 18

第一種方式

我們可以通過(guò)@Value注解,這是Spring就有的,使用${...}占位符來(lái)讀取配置在屬性文件中的內(nèi)容,既可以加在屬性也可以加在方法上

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; 
@Component
public class User { 
    @Value("${custom.name}")
    private String name; 
    private Integer age; 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
    
    public Integer getAge() {
        return age;
    }
 
    @Value("${custom.age}")
    public void setAge(Integer age) {
        this.age = age;
    }
}

我們?cè)跍y(cè)試環(huán)境試一下:

@SpringBootTest
class DemoApplicationTests { 
    @Autowired
    User user; 
    @Test
    void contextLoads() {
        System.out.println(user.getName());
        System.out.println(user.getAge());
    } 
}

第二種方式

如果有很多我們就要寫(xiě)很多@Value,就會(huì)很麻煩,于是就有第二種方式

通過(guò)注解@ConfigurationProperties(prefix="配置文件中的key的前綴")可以將配置文件中的配置自動(dòng)與實(shí)體進(jìn)行映射,默認(rèn)從全局配置文件中獲取值。

@ConfigurationProperties("custom")這里的字符串database會(huì)和類(lèi)中的屬性名稱(chēng)組成全限定名去配置文件中查找

@Component
@ConfigurationProperties(prefix = "custom")
public class User { 
    private String name; 
    private Integer age; 
getter()... setter()...
}

擴(kuò)展

1、如何獲取list數(shù)據(jù)

test.list=aaa,bbb,ccc

又該如何讀取呢?

@SpringBootTest
class DemoApplicationTests { 
    @Value("#{'${test.list:}'.empty ? null : '${test.list:}'.split(',')}")
    private List<String> testList; 
    @Test
    void contextLoads() {
      if (testList == null){
          System.out.println("empty");
      }else{
          for (String list:testList
               ) {
              System.out.println(list);
          }
      }
    } 
}

首先這是一個(gè)EL表達(dá)式,${test.list:} 是為它加上默認(rèn)值,但是這樣有個(gè)問(wèn)題,當(dāng)不配置該 key 值,默認(rèn)值會(huì)為空串,它的 length = 1,這樣解析出來(lái) list 的元素個(gè)數(shù)就不是空了

所以在此之前先判斷一下是否為空,最終寫(xiě)成這樣@Value("#{'${test.list:}'.empty ? null : '${test.list:}'.split(',')}") 就完美了,遍歷的結(jié)果

2、如何獲取map數(shù)據(jù)

test.map={name:"守約",force:"95"}

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

相關(guān)文章

  • Java更新調(diào)度器(update scheduler)的使用詳解

    Java更新調(diào)度器(update scheduler)的使用詳解

    Java更新調(diào)度器是Java中的一個(gè)特性,可以自動(dòng)化Java應(yīng)用程序的更新過(guò)程,它提供了一種方便的方式來(lái)安排Java應(yīng)用程序的更新,確保其與最新的功能、錯(cuò)誤修復(fù)和安全補(bǔ)丁保持同步,本文將深入介紹如何使用Java更新調(diào)度器,并解釋它對(duì)Java開(kāi)發(fā)人員和用戶(hù)的好處
    2023-11-11
  • Java JDBC API介紹與實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池流程

    Java JDBC API介紹與實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池流程

    JDBC是指Java數(shù)據(jù)庫(kù)連接,是一種標(biāo)準(zhǔn)Java應(yīng)用編程接口( JAVA API),用來(lái)連接 Java 編程語(yǔ)言和廣泛的數(shù)據(jù)庫(kù)。從根本上來(lái)說(shuō),JDBC 是一種規(guī)范,它提供了一套完整的接口,允許便攜式訪問(wèn)到底層數(shù)據(jù)庫(kù),本篇文章我們來(lái)了解JDBC API及數(shù)據(jù)庫(kù)連接池
    2022-12-12
  • 自定義BufferedReader的實(shí)例

    自定義BufferedReader的實(shí)例

    下面小編就為大家分享一篇自定義BufferedReader的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • 淺析java中常用的定時(shí)任務(wù)框架-單體

    淺析java中常用的定時(shí)任務(wù)框架-單體

    這篇文章主要帶大家了解常用的單體應(yīng)用定時(shí)任務(wù)框架以及掌握定時(shí)任務(wù)在單體中如何使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2021-12-12
  • Java實(shí)現(xiàn)ArrayList排序的方法詳解

    Java實(shí)現(xiàn)ArrayList排序的方法詳解

    Java中常見(jiàn)的ArrayList排序方法主要為三種:JDK8的stream、Comparator#compare()和Comparable#compareTo(),本文將詳解這三者的使用,需要的可以參考一下
    2022-05-05
  • 在Java編程中使用正則表達(dá)式的基本方法

    在Java編程中使用正則表達(dá)式的基本方法

    這篇文章主要介紹了在Java編程中使用正則表達(dá)式的基本方法,是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • SpringMVC多個(gè)模塊404報(bào)錯(cuò)問(wèn)題及解決

    SpringMVC多個(gè)模塊404報(bào)錯(cuò)問(wèn)題及解決

    這篇文章主要介紹了SpringMVC多個(gè)模塊404報(bào)錯(cuò)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java Apache Shiro安全框架快速開(kāi)發(fā)詳解流程

    Java Apache Shiro安全框架快速開(kāi)發(fā)詳解流程

    Apache Shiro是一個(gè)強(qiáng)大且易用的Java安全框架,執(zhí)行身份驗(yàn)證、授權(quán)、密碼和會(huì)話管理。使用Shiro的易于理解的API,您可以快速、輕松地獲得任何應(yīng)用程序,從最小的移動(dòng)應(yīng)用程序到最大的網(wǎng)絡(luò)和企業(yè)應(yīng)用程序
    2021-10-10
  • Spring加載XSD文件發(fā)生錯(cuò)誤的解決方法

    Spring加載XSD文件發(fā)生錯(cuò)誤的解決方法

    這篇文章主要介紹了Spring加載XSD文件發(fā)生錯(cuò)誤的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 實(shí)例解讀Ajax與servlet交互的方法

    實(shí)例解讀Ajax與servlet交互的方法

    這篇文章主要介紹了Ajax與servlet交互的方法,需要的朋友可以參考下
    2014-07-07

最新評(píng)論