SpringBoot读取配置⽂件中的数据到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的l⽂件中添加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
然后定义⼀个配置类,代码如下:
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依赖项。
然后定义配置类,代码如下:
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 fig.ListConfig;
import fig.MapConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.st.context.SpringBootTest;
import st.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 = LimitSizeMap();
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: "+ (key));
}
}
System.out.println("------");厦门有什么好玩的
List<String> limitSizeList = LimitSizeList();
读取配置文件失败
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