springboot读取XXX.properties自定义配置文件中的map和list类型配置参数

1. maven的pom.xml文件中添加如下依赖

<!-- 配置文件要用到的jar包 processor -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>

2. 配置文件 XXX.properties添加如下参数

说明:配置文件中的前缀需要全部小写,不能出现大写。 例如下面的 data

#map 第一种方式
data.person.name=zhangsan
data.person.sex=man
data.person.age=11
data.person.url=xxxxxxxx
#map 第二种方式
data.person[name]=zhangsan
data.person[sex]=man
data.person[age]=11
data.person[url]=xxxxxxxx
#list 第一种方式
data.list[0]=apple0
data.list[1]=apple1
data.list[2]=apple2
#list 第二种方式
data.list=apple0,apple1,apple2,\
apple3,apple4,apple5

3.写一个DataConfig类,用来读取配置信息

#要注意的地方是 属性名 要与 XXX.properties中的参数的名保持一致,详见属性注解

//@Configuration 标识这是一个配置类
@Component("configData") // 添加到bean容器时指定其名为 configData
@ConfigurationProperties(prefix = "data")  // 读取前缀为 data 的内容
//如果只有一个主配置类文件,@PropertySource可以不写
@PropertySource("classpath:XXX.properties")
// @PropertySource(value = { "classpath:config/XXX.properties" }, encoding = "utf-8")
public class DataConfig{

    /**
     * data.person.name
     * 这里map名需要和XXX.properties中的参数data.person.name的person一	 致
     */
    private Map<String, String> person = new HashMap<>();
    /**
     * data.list
     * 这里list名需要和XXX.properties中的参数data.list的list一致
     */
    private List<String> list = new ArrayList<>();
  
   
    /**
     * 编写get,set方法方便使用
     */   
    public Map<String, String> getPerson() {
        return person;
    }
 
    public void setPerson(Map<String, String> person) {
        this.person = person;
    }
 
    public List<String> getList() {
        return list;
    }
 
    public void setList(List<String> list) {
        this.list = list;
    }
}

4.测试类测试

    @Autowired
    @Qualifier("configData")  //  指定注入bean的名称,提高注入准确性
    private DataConfig dataConfig;
 
    @Test
    public void contextLoads() {
 
        Map<String, String> person = dataConfig.getPerson();
        List<String> list = dataConfig.getList();
        System.out.println("image:"+JSONObject.fromObject(person).toString());
        System.out.println("list:"+ JSONArray.fromObject(list).toString());
    }
    

输出结果

    image:{"sex":"man","name":"zhangsan","age":"11","url":"xxxxxxxx"}
    list:["apple0","apple1","apple2","apple3","apple4","apple5"]
引用\[1\]中提到的报错是因为在代码中尝试读取一个未定义的属性。具体来说,在这个例子中,报错是因为尝试读取一个未定义的属性"map"。这种错误通常发生在以下几种情况下: 1. 调用了一个不需要分页的接口,但是在代码中仍然尝试读取分页属性"res.items"。解决方法是将代码中的"res.items"去掉。 2. 在异步请求获取数据时,由于数据是异步获取的,所以一开始是没有该数据属性的。如果在代码中尝试读取未定义的属性,就会报错。解决方法是在初始化时,将该属性赋值为空对象或其他默认值。 3. 在使用axios进行异步传值时,可能出现值还未传完就已经尝试将值填充到图标中的情况。解决方法是使用同步传值,确保值已经完全传递后再进行操作。 根据你提供的问题"TypeError: Cannot read properties of undefined (reading 'getRes')",我无法确定具体的解决方法,因为引用中没有提到与该问题相关的内容。如果你能提供更多的上下文或代码片段,我将能够给出更准确的答案。 #### 引用[.reference_title] - *1* [Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘map‘)](https://blog.csdn.net/weixin_45810306/article/details/129319621)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [前端解决 “TypeError: Cannot read properties of undefined (reading ‘xxx‘)的多种情况](https://blog.csdn.net/sunwenpinglike/article/details/129690571)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [187 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘get](https://blog.csdn.net/m0_61871870/article/details/130549840)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值