中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot怎么讀取配置文件中的數據到map和list

發布時間:2022-02-23 09:07:36 來源:億速云 閱讀:542 作者:iii 欄目:開發技術

今天小編給大家分享一下SpringBoot怎么讀取配置文件中的數據到map和list的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

讀取配置文件中的數據到map和list

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

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

后面遇到一個新問題,如果我要把配置文件中的一系列數據一下子讀出來到同一個數據結構中怎么辦呢?

比如說讀取配置信息到map或者list

下面來講述一下如何實現這個功能。

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

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

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

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

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

然后定義一個配置類,代碼如下:

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;
/**
 * 配置類
 * 從配置文件中讀取數據映射到map
 * 注意:必須實現set方法
 * @author eknows
 * @version 1.0
 * @since 2019/2/13 9:23
 */
Configuration
ConfigurationProperties(prefix = "test")
EnableConfigurationProperties(MapConfig.class)
public class MapConfig {
    /**
     * 從配置文件中讀取的limitSizeMap開頭的數據
     * 注意:名稱必須與配置文件中保持一致
     */
    private Map<String, Integer> limitSizeMap = new HashMap<>();
    public Map<String, Integer> getLimitSizeMap() {
        return limitSizeMap;
    }
    public void setLimitSizeMap(Map<String, Integer> limitSizeMap) {
        this.limitSizeMap = limitSizeMap;
    }
}

這樣,我們就可以把配置文件中的數據以map形式讀出來了,key就是配置信息最后一個后綴,value就是值。

測試代碼請看文章最后。

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依賴項。

然后定義配置類,代碼如下:

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;
/**
 * 配置類
 * 從配置文件中讀取數據映射到list
 * @author eknows
 * @version 1.0
 * @since 2019/2/13 9:34
 */
Configuration
@ConfigurationProperties(prefix = "test-list") // 不同的配置類,其前綴不能相同
@EnableConfigurationProperties(ListConfig.class) // 必須標明這個類是允許配置的
public class ListConfig {
    private List<String> limitSizeList = new ArrayList<>();
    public List<String> getLimitSizeList() {
        return limitSizeList;
    }
    public void setLimitSizeList(List<String> limitSizeList) {
        this.limitSizeList = limitSizeList;
    }
}

測試上述配置是否有效

編寫測試類:

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讀取成功,數據如下:");
            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讀取成功,數據如下:");
            for (String str : limitSizeList) {
                System.out.println(str);
            }
        }
    }
}

運行測試類,發現控制臺輸出如下:

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

配置文件的讀取(包括list、map類型)

添加配置文件處理器的依賴,這樣在編寫配置文件的時候就會有提示了。

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

有了依賴,可以直接使用application.properties文件為我們工作了,這是Springboot的默認文件,它會通過其機制讀取到上下文中,這樣就可以引用它了

讀取配置文件

在使用maven項目中,配置文件會放在resources根目錄下。

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

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

首先在application.properties中添加我們要讀取的數據。

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

第一種方式

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

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;
    }
}

我們在測試環境試一下:

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

第二種方式

如果有很多我們就要寫很多@Value,就會很麻煩,于是就有第二種方式

通過注解@ConfigurationProperties(prefix="配置文件中的key的前綴")可以將配置文件中的配置自動與實體進行映射,默認從全局配置文件中獲取值。

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

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

擴展

1、如何獲取list數據

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);
          }
      }
    } 
}

首先這是一個EL表達式,${test.list:} 是為它加上默認值,但是這樣有個問題,當不配置該 key 值,默認值會為空串,它的 length = 1,這樣解析出來 list 的元素個數就不是空了

SpringBoot怎么讀取配置文件中的數據到map和list

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

SpringBoot怎么讀取配置文件中的數據到map和list

2、如何獲取map數據

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

SpringBoot怎么讀取配置文件中的數據到map和list

以上就是“SpringBoot怎么讀取配置文件中的數據到map和list”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

房产| 东平县| 长葛市| 江津市| 和田县| 油尖旺区| 介休市| 建阳市| 浠水县| 鹤壁市| 万山特区| 邹城市| 东兰县| 博乐市| 南漳县| 岑巩县| 互助| 贵南县| 怀来县| 凤台县| 信丰县| 禹城市| 郴州市| 怀宁县| 梅河口市| 淮滨县| 宜阳县| 阜城县| 博湖县| 三江| 喜德县| 巴彦淖尔市| 修武县| 右玉县| 乐昌市| 克什克腾旗| 西盟| 宁乡县| 贵阳市| 青田县| 仁化县|