今天小编给大家分享一下SpringBoot怎么读取配置文件中的数据到map和list的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一
今天小编给大家分享一下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;ConfigurationConfigurationProperties(prefix = "test")EnableConfigurationProperties(MapConfig.class)public class MapConfig { 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;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;@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 = 8081custom.name = lonewalkercustom.age = 18
我们可以通过@Value注解,这是Spring就有的,使用${...}占位符来读取配置在属性文件中的内容,既可以加在属性也可以加在方法上
import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component; @Componentpublic 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; }}
我们在测试环境试一下:
@SpringBootTestclass 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
又该如何读取呢?
@SpringBootTestclass 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”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。
--结束END--
本文标题: SpringBoot怎么读取配置文件中的数据到map和list
本文链接: https://lsjlt.com/news/323183.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0