yml文件里的数组使用 @Value || @ConfigurationProperties

前言

最近有个功能突然有个需求,需要在yml配置文件里配置多条路径,需要动态获取配置文件里的参数,根据接口接收的参数判断,使用对应的配置

就了解到yml数组,遂记录

一、 yml数组形式

upload-record-paths:
  basepath: filerecord
  list:
    - name: 111
      path: 111
    - name: 222
      path: 222

其中对象对应Java元素结构为map,一个 “ - ” 代表一组,整体是一个List,因为@Value不支持取复杂对象且限制较多,除了一个值一个值的取,只能使用SpEL(后文有解释),所以我使用配置类的方式

二、配置类取对象

@Configuration
@ConfigurationProperties(prefix = "upload-record-paths")
@Data
public class UploadRecordProperties {
    public static List<Map<String, String>> list;   //static 才能拿配置值
}

其中upload-record-paths为yml配置文件前缀,使用也很简单,代码中直接

// 动态获取配置文件 - 或者使用@Autowried注入配置对象,通过get获取
List<Map<String, String>> list = UploadRecordProperties.getList();

String path = null;
    for (Map map : list){
          String name = (String) map.get("name");
          if (name.equalsIgnoreCase(fileType)){
              path = recordbasepath + File.separator + (String) map.get("path") + File.separator + rocordId;
          }
      }
      if (StringUtils.isBlank(path)){
          // 没有对应类型
          return ResponseEntityResult.error("没有找到匹配的文件类型:" + fileType);
      }

大概是以上流程。

我个人有个参考使用方式可取出

@Value("#{'${com.xxx.xxx-list:}'.empty ? null : '${com.xxx.xxx-list:}'.split(',')}")
    private List<String> list;

对应的yml格式为

# 通过,分隔使用的参数
com:
	xxx:
		xxx-list: 
	.dwt,.dwg,.dxf,.zip,.rar,.mxd

文章发布一个月后,发现了一个博主的好文章解释了为啥能这样,晒这

[@value 数组_SpringBoot @Value 读取配置,太强大了!](文章发布一个月后,发现了一个博主的好文章,晒这,能不使用配置类使用
@value 数组_SpringBoot @Value 读取配置,太强大了!

三、SpEL

前面说到@Value取值限制较多,这是因为除了正常的一个个参数使用$获取,就只剩下SpEL的方式了。
首先看看使用@Value和@ConfigurationProperties配置类的方式有什么不同

图片来自参考文章
图片来自参考文章

我们可以看出使用@ConfigurationProperties配置类比@Value支持的方法多,其中松散绑定是

比如说有个yml参数是 file-upload
在配置类中可以写成file-upload或者fileUpload

其他几种可以查看参考材料里的文章了解。

四、参考材料

这是第三部分的参考文章:spring boot 配置文件properties,yml语法学习及属性获取@ConfigurationProperties和@Value

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值