经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring » 查看文章
关于springBoot yml文件的list读取问题总结(亲测)
来源:jb51  时间:2021/12/17 11:25:19  对本文有异议

springBoot yml文件的list读取问题

折腾了很久,记录下。

配置如下

  1. # 自定义数据上报信息
  2. xx:
  3. # 机组信息
  4. machine1s:
  5. - name: XXXX
  6. frequency: null
  7. frequency-unit: null
  8. pressure: 0.01
  9. pressure-unit: Pa
  10. flow: 0
  11. flow-unit: NM3/H
  12. state: 停机
  13. runtime: 17.5
  14. runtime-unit:
  15. - name: XXXX
  16. frequency: 42.4
  17. frequency-unit: HZ
  18. pressure: 0.39
  19. pressure-unit: Pa
  20. flow: 4730
  21. flow-unit: NM3/H
  22. state: 运行
  23. runtime: 12.5
  24. runtime-unit:
  25. - name: XXXX
  26. frequency: 46.4
  27. frequency-unit: HZ
  28. pressure: 0.00
  29. pressure-unit: Pa
  30. flow: 0
  31. flow-unit: NM3/H
  32. state: 停机
  33. runtime: 8.2
  34. runtime-unit:
  35. - name: XXXX
  36. frequency: 41.4
  37. frequency-unit: HZ
  38. pressure: 0.39
  39. pressure-unit: Pa
  40. flow: 9532
  41. flow-unit: NM3/H
  42. state: 运行
  43. runtime: 3.2
  44. runtime-unit:
  45. - name: XXXX
  46. frequency: null
  47. frequency-unit: null
  48. pressure: 0.38
  49. pressure-unit: Pa
  50. flow: 4800
  51. flow-unit: NM3/H
  52. state: 停机
  53. runtime: 20.4
  54. runtime-unit:
  55. - name: XXXX
  56. frequency: null
  57. frequency-unit: null
  58. pressure: 0.01
  59. pressure-unit: Pa
  60. flow: 0
  61. flow-unit: NM3/H
  62. state: 停机
  63. runtime: 7.5
  64. runtime-unit:

1.定义配置类

  1. @ConfigurationProperties(prefix = "xx")
  2. public class TXMachinesProperties {
  3. private List<Map<String, String>> machine1s;
  4. public List<Map<String, String>> getMachine1s() {
  5. return machine1s;
  6. }
  7. public void setMachine1s(List<Map<String, String>> machine1s) {
  8. this.machine1s = machine1s;
  9. }
  10. }

注意:

a.这里prefix写到接收对象的前一级即可;

b.这里的变量名必须要与配置的名称一致,才可自动接收。

2.定义启动的配置类

这里其实可与上面的配置类写在一起,但是一个类就是做一件事情,就做了隔离。

  1. @Configuration
  2. @EnableConfigurationProperties({TXMachinesProperties.class})
  3. public class TXMachinesConfig {
  4. }

3.使用方式

采用下面的方式即可。这里注意,由于使用这个yml的注解是属于SpringBoot的框架内进行的,因此这个属性注入只能在标有Spring的注解的类的范围内使用,不能在普通类使用。

  1. @Autowired
  2. private TXWorkShopAlarmProperties txWorkShopAlarmProperties;

可以解决了~

读取yml文件里的list配置

YAML 支持以下几种数据类型

  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
  • 纯量(scalars):单个的、不可再分的值

这里只介绍list类型的读取

yml里的list配置(以 - 开头的行表示构成一个数组:):

  1. weixin:
  2. configs:
  3. - schId: 111
  4. appId: 11111
  5. appSecret: 11111
  6. templateId: 111111
  7. - schId: 2222
  8. appId: 222222
  9. appSecret: 2222222
  10. templateId: 2222222

导入jar包

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-configuration-processor</artifactId>
  4. <version>2.2.1.RELEASE</version>
  5. </dependency>

写一个微信配置的实体类,将配置文件中配置的每一个属性的值,映射到这个实体类中

  1. import lombok.Data;
  2. import org.springframework.boot.context.properties.ConfigurationProperties;
  3. import org.springframework.stereotype.Component;
  4. import java.util.List;
  5.  
  6. @Component
  7. @Data
  8. @ConfigurationProperties(prefix = "weixin")
  9. public class WxConfig {
  10. private List<Config> configs;
  11. @Data
  12. public static class Config {
  13. private Integer schId;
  14. private String appId;
  15. private String appSecret;
  16. private String templateId;
  17. }
  18. }

拿到配置文件里的内容

1.注入该实体类

  1. @Autowired
  2. private WxConfig wxConfig;

2.解析,我这里是将其转为学校id为key的map,方便我后面使用,按照自己想要的读取就好了JSON.toJSONString(wxConfig)

  1. public Map<Integer,Map> getWeiXinConfig(){
  2. JSONObject o = JSON.parseObject(JSON.toJSONString(wxConfig));
  3. JSONArray jsonArray = o.getJSONArray("configs");
  4. Map<Integer,Map> map = new HashMap<>();
  5. if (jsonArray.size() != 0) {
  6. for (int j = 0; j < jsonArray.size(); j++) {
  7. Map map2 = new HashMap();
  8. JSONObject o1 = jsonArray.getJSONObject(j);
  9. String appId = o1.getString("appId");
  10. String appSecret = o1.getString("appSecret");
  11. Integer schId = o1.getIntValue("schId");
  12. String templateId = o1.getString("templateId");
  13. map2.put("appId", appId);
  14. map2.put("appSecret", appSecret);
  15. map2.put("schId", schId);
  16. map2.put("templateId", templateId);
  17. map.put(schId,map2);
  18. }
  19. }
  20. return map;
  21. }

调用方法getWeiXinConfig(),输出map的输出结果:

在这里插入图片描述

以上为个人经验,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号