application.yml 配置对象数组

  1. 定义配置文件结构: 用于定义配置文件的数据结构
## 打印服务中用到的打印机信息配置
printer-configs:
  printers:
    - id: 1
      print_name: printName1
      host: 127.0.0.1:8083/print/printTest/
    - id: 2
      print_name: printName2
      host: 127.0.0.1:8083/print/printTest/
    - id: 3
      print_name: printName3
      host: 127.0.0.1:8083/print/printTest/

从上面代码可看出,根节点 printer-configs,包含一个List 对象printers,其中printers数组中又包含3个对象,每个对象有三个属性。(一个‘-’短线代表一个对象)
2. 定义配置文件的根节点 进行展示;

@Data
@Component
@ConfigurationProperties(prefix = "printer-configs")
public class PrinterConfigs {
	 /**包含打印机配置文件的数组*/
    private List<PrinterInfo> printers;
}
  1. 定义对象: 用于定义配置文件的数据结构
@Data
public class PrinterInfo implements Serializable {
    /*** 编号*/
    private String id;
    /*** 打印机名*/
    private String print_name;
    /*** 主机加端口号*/
    private String host;
}
  1. 使用:
/**
     * 标签打印机的配置信息
     */
    @Autowired
    public PrinterConfigs printers;//1定义并获取值
    
    //拿到集合中的数组对象
	List<PrinterInfo> printList = printers.getPrinters();

常规对象中获取属性

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 常规对象中获取属性
# 用户信息
userinfo:
	name: 张三
	password: 123
# 打印服务中用到的打印机信息配置
printer-configs:
 printers:
   - id: 1
     print_name: print1
     host: 127.0.0.1:8083/print/printTest/
   - id: 2
     print_name: print2
     host: 127.0.0.1:8083/print/printTest/
   - id: 3
     print_name: print3
     host: 127.0.0.1:8083/print/printTest/

需要获取 userinfo 中的 name 属性
此时不需要像之前一样复杂的定义对象,只需要使用如下的方式便能拿到需要的数据

	@Value("${userinfo.name}")
    public String name;
	@Value("${userinfo.password}")
    public String password;

场景

在项目的使用过程中,一些经常会变动的值,一般会定义枚举类,比如单据类型:
在这里插入图片描述

如图,它实际上也就是key\value 的键值对,但这是硬编码,在需要增加时,就需要修改代码、重启服务。
实际应用中,会存在两种模式来配置这些信息,一种是将这些枚举的键值对配置在数据库中,如下图

在使用到时按照条件去数据库中查找。只需要往数据库中添加数据,不需要重启服务。
而修改配置文件的方式,实施人员自己结合现场实际修改之后重启服务,即完成,也相对灵活,但数据量大的情况下不建议使用。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐