springboot从application.properties中注入list, map方式

作者:uweii 时间:2023-11-28 23:42:33 

需求

在配置类中,从application.properties中读取一个复杂list。如List<Person>或者初始化一个map

直接上代码

配置类


@Configuration
@Component
@ConfigurationProperties(prefix = "datahub")
public class Config {
   private List<DatahubParam> datahubParams;
   private Map<String, Object> map;
   public void setMap(Map<String, Object> map) {
       this.map = map;
   }

public Map<String, Object> getMap() {
       return map;
   }

public List<DatahubParam> getDatahubParams() {
       return datahubParams;
   }

public void setDatahubParams(List<DatahubParam> datahubParams) {
       this.datahubParams = datahubParams;
   }
}

DatahubParam.java:


public class DatahubParam {
   private String project;
   private String topic;
   private String subId;
   private String shardId;

@Override
   public String toString() {
       return "{project: " + project + ", topic: " + topic + ", subId: " + subId + ", shardId: " + shardId + "}";
   }

public String getProject() {
       return project;
   }

public void setProject(String project) {
       this.project = project;
   }

public String getTopic() {
       return topic;
   }

public void setTopic(String topic) {
       this.topic = topic;
   }

public String getSubId() {
       return subId;
   }

public void setSubId(String subId) {
       this.subId = subId;
   }

public String getShardId() {
       return shardId;
   }

public void setShardId(String shardId) {
       this.shardId = shardId;
   }
}

application.properties:


datahub.datahub-params[0].project = project-0
datahub.datahub-params[0].topic = topic-0
datahub.datahub-params[0].sub-id = subId-0
datahub.datahub-params[0].shard-id = shardId-0

datahub.datahub-params[1].project = project-1
datahub.datahub-params[1].topic = topic-1
datahub.datahub-params[1].sub-id = subId-1
datahub.datahub-params[1].shard-id = shardId-1

datahub.map.username=uwei
datahub.map.age=22
datahub.map.salary=15000

测试类


@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloTest {
   @Autowired
   Config config;

@Test
   public void test(){
       System.out.println(config.getDatahubParams());
       System.out.println(config.getMap());
   }
}

运行结果:

springboot从application.properties中注入list, map方式

application.properties配置注入出现错误

配置list,map(list内含对象)多层嵌套问题,注入对象失败,无法加载到配置文件

继SpringBoot使用@Value无法赋值之后,kimball又遇到一个application.properties配置注入问题,可能作为新手,这里该踩得坑都掉下去了~真是一踩一个准。

问题描述

application.properties配置注入出现错误,配置list,map(list内含对象)多层嵌套问题,注入对象失败,无法加载到配置文件。后询问多方大神,仍无法加载,那么自己慢慢测试吧。

我的目录结构是这样:对象建立了postinfolist>postinfo>header三层结构,header内含Map键值对,postinfolist是postinfo的List集合,故也算是个多层嵌套的格式。一开始我的配置如下:

springboot从application.properties中注入list, map方式

springboot从application.properties中注入list, map方式

springboot从application.properties中注入list, map方式

springboot从application.properties中注入list, map方式

大概情况应该是描述清楚了吧,下面我们来分析没有加载到配置文件的错误原因及分析方法。

作为freshman,我只是一步步验证,既然加载不到这么多层,那么我从最低层header验证,单独配置了下header,header.headerMap.AppKey=xxx(header prefix注意修改),结果加载到了,那么好,说明不是配置文件加载啊或是引入啊什么的问题,应该是多层嵌套自己写的有误。

那么第二步,往上一层,配置postinfo.header.headerMap.AppKey=xxx(prefix对应修改,不在多说),又加载到了,那么可以知道问题所在了,配置postinfolist时,List这块儿配置的不正确。这样一步步排查,我们可以找到问题所在,所以有问题,先想排查方法,找到问题所在就可以迎刃而解,本质有点像方 * ~

那么再回看这个配置文件,此时对application.properties的配置也有点领悟了,实际上就是 自上而下的表达出你要注入的参数,也就是我的上层postinfolist(Springboot帮我们注入时先找这个最上级),而后一点一点往后去找对应关系,也就是先找到对象内的postinfolist这个List集合,即对象的成员变量,那么配置我们就可以写postinfolist.postinfolist获得了List集合,而后要表达集合里的postinfo,postinfolist.postinfolist[0],即相当于list.get(0),这么来看是不是很容易理解application的配置文件写法了,而后再逐层表示到你要注入的参数即可,也就是postinfolist.postinfolist[0].header.headerMap.AppKey,之前的写法只是觉得是对应上prefix的前缀就可以读到了,而其实Springboot为我们做的更多,将你写的对象通过一步步层级关系来分析注入,也算是新人对Springboot的一点敬仰吧,之前接触过一段ssh,那是一段痛苦的历程,很多东西要自己配置,而springboot真是让我们把重心放在开发功能上而不是繁琐的配置文件上。

最后,不知道有没有解决到同样遇到配置问题注入的你,自己慢慢发现其中的问题对于理解新鲜事物有着很大的帮助,戒骄戒躁。

来源:https://blog.csdn.net/dummyo/article/details/102495784

标签:springboot,application.properties,list,map
0
投稿

猜你喜欢

  • java 集合----Map、Collection

    2022-11-09 03:39:01
  • MybatisPlus中@TableField注解的使用详解

    2021-11-01 23:05:35
  • Java Spring的refresh方法你知道吗

    2023-07-08 11:53:18
  • Java中Set与List的关系与区别介绍

    2023-03-17 08:01:07
  • Java中StringUtils与CollectionUtils和ObjectUtil概念讲解

    2023-11-29 07:45:38
  • Java中Maven项目导出jar包配置的示例代码

    2023-01-26 20:09:32
  • Spring整合Mybatis思路梳理总结

    2021-08-19 18:46:38
  • C#中Arraylist的sort函数用法实例分析

    2023-01-08 21:40:27
  • Android PopupWindow增加半透明蒙层

    2021-12-30 04:12:09
  • 使用ehcache三步搞定springboot缓存的方法示例

    2021-06-25 04:44:12
  • Kotlin基础教程之面向对象

    2023-06-21 19:54:36
  • 详解Spring boot/Spring 统一错误处理方案的使用

    2023-11-24 12:56:07
  • 实例讲解Java读取一般文本文件和word文档的方法

    2023-11-13 05:09:53
  • Android自定义漂亮的圆形进度条

    2023-08-04 04:23:06
  • C#实现伪装文件夹功能

    2023-04-28 14:21:38
  • C# 基于udp广播收集局域网类所有设备信息

    2022-04-28 00:17:23
  • java 三种将list转换为map的方法详解

    2023-09-13 03:35:39
  • Java中DecimalFormat用法及符号含义

    2023-05-04 04:31:14
  • Spring Boot配置接口WebMvcConfigurer的实现

    2023-11-27 23:28:50
  • Android中bindService基本使用方法概述

    2023-08-05 19:18:56
  • asp之家 软件编程 m.aspxhome.com