您好,登錄后才能下訂單哦!
今天小編給大家分享一下SpringBoot怎么讀取配置文件中的數據到map和list的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
之前使用過@Value("${name}")來讀取springboot配置文件中的配置信息,比如:
@Value("${server.port}") private Integer port;
后面遇到一個新問題,如果我要把配置文件中的一系列數據一下子讀出來到同一個數據結構中怎么辦呢?
比如說讀取配置信息到map或者list
下面來講述一下如何實現這個功能。
首先看配置文件要讀到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就是值。
測試代碼請看文章最后。
首先看配置文件要讀到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
添加配置文件處理器的依賴,這樣在編寫配置文件的時候就會有提示了。
<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 的元素個數就不是空了
所以在此之前先判斷一下是否為空,最終寫成這樣@Value("#{'${test.list:}'.empty ? null : '${test.list:}'.split(',')}") 就完美了,遍歷的結果
2、如何獲取map數據
test.map={name:"守約",force:"95"}
以上就是“SpringBoot怎么讀取配置文件中的數據到map和list”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。