精华内容
下载资源
问答
  • yml格式(list

    千次阅读 2019-12-24 16:52:04
    配置一个nodes节点 nodes: - node1 - node2 - node3

    配置一个nodes节点

    nodes:
        - node1
        - node2
        - node3

     

    展开全文
  • 在项目中遇到使用List<List>...一 、使用yml文件配置属性,而非properties文件 environments: dev: url: https://dev.example.com name: Developer Setup prod: url: https://anothe...

    在项目中遇到使用List<List>形式属性配置的问题,记录一下。

    一 、使用yml文件配置属性,而非properties文件

    environments:
        dev:
            url: https://dev.example.com
            name: Developer Setup
        prod:
            url: https://another.example.com
            name: My Cool App

    上面等价下面的properties配置,实际上是会转换成如下的配置:

    environments.dev.url=https://dev.example.com
    environments.dev.name=Developer Setup
    environments.prod.url=https://another.example.com
    environments.prod.name=My Cool App

    二、List 类型的属性配置

     

    my:
       servers:
           - dev.example.com
           - another.example.com

    等价如下的properties 配置

    my.servers[0]=dev.example.com
    my.servers[1]=another.example.com

    三、Java 中定义对应配置类

    注意要有set方法。

    @ConfigurationProperties(prefix="my")
    public class Config {
    
        private List<String> servers = new ArrayList<String>();
    
        public List<String> getServers() {
            return this.servers;
        }
        public void setServers(List servers) {
            this.servers = servers;
        }
    }

    四、如何定义List<List<String>> 的属性

    my: 
      clusters: 
        cluster
           - c1_Host1,c1_Host2
           - c2_Host1,c2_Host2

     

    展开全文
  • SpringBoot yml配置文件注入List和Map 首先要在配置文件中配置List和Map信息: List需要注意: – 首页 这里有一个空格 同样Map这里也需要注意: 5: 首页 这里也有一个空格 myprops: showpagemaps: 5: 首页 6: 主...
  • 【踩坑】解决springboot注入yml配置文件 list报错

    千次阅读 热门讨论 2019-10-31 19:47:33
    springboot中yml配置注入一般使用@Value注解可注入String类型数据,比如: @Value("${config}") String stringConfig; 即可注入属性,而注入list使用此方法则会报错提示Could not resolve placeholder xxx。 ...

    springboot中yml配置注入一般使用@Value注解可注入String类型数据,比如:

    @Value("${config}")
    String stringConfig;

    即可注入属性,而注入list使用此方法则会报错提示Could not resolve placeholder xxx

    注入list的正确方法

    配置文件实例

    list-config:
      config:
        - companyId
        - userId
        - originId

    注入姿势

    @ConfigurationProperties(prefix = "list-config")
    @Component
    @Setter
    public class VisitorSourceController implements VisitorSourceApi {
    
        List<String> config;
    
    }

    注意:必须在类上添加Lombok的@Setter注解或者加上属性set方法,否则config属性会获取到null。

    展开全文
  • 解决 @ConfigurationProperties 合并多个yml 或者properties 文件里面的属性 一、 介绍一、案例 背景二、 改动 以及...如果我们在 yml 文件里面配置了 List 类型的属性, 然后 在 配置属性的类上面 使用 @Configurati

    一、 介绍

    如果我们在 yml 文件里面配置了 List 类型的属性, 然后 在 配置属性的类上面 使用 @ConfigurationProperties 注解,便可以直接注入 List 属性 ,如果把属性分在多个文件 里面, Spring 是不支持的.

    最后解决方案很简单, 但是也很不错, Spring 维护者 建议的最佳方案

    我自己内心的想法: 一开始 看了源码之后,知道是不支持的, 便开始想办法解决, 想了好多种方法

    1. 继承 InitializingBean , EnvironmentAware ,重写 afterPropertiesSet() ,通过 environment.getProperties(“xxx”) 进行重新赋值
    2. 通过 继承 beanpostprocessor, 加上 反射, 也是重新赋值

    最后搞得挺烦的 ,但是最终的解决方案让我 又一次加深理解了这句话 : 代码之上是思想,代码之上是思想,代码之上是思想 ,说三遍!!!

    一、案例 背景

    如果我们在 yml 文件里面配置了 List 类型的属性, 然后 在 配置属性的类上面 使用 @ConfigurationProperties 注解,便可以直接注入 List 属性 ,例如:

    我们在 the application.yml 里面配置如下:

    test:
      db:
        datasources:
          - url: jdbc:mysql://localhost:3306/writedb
            username: root
            password: root
          - url: jdbc: mysql://localhost:3306/readdb
            username: root
            password: root
    

    我们在 类里面加上 注解 @ConfigurationProperties(prefix = “test.db”) ,只要启动时扫描到,

    @ConfigurationProperties(prefix = "test.db")
    @Configuration
    public class AutoLoadDataSourceProperties {
    
        private List<DataSourceCommonProperties> datasources;	
    	
    	// get
            // set
    }
    

    二、 改动 以及结果

    但是 现在需要将里面的 用户名/密码抽到另外一个 文件里面, 需要统一管理, 不能在 配置文件里面单独配置 用户名和密码, 于是就分开配置

    the application.yml :

    test:
      db:
        datasources:
          - url: jdbc:mysql://localhost:3306/writedb
          - url: jdbc:mysql://localhost:3306/readdb
    
    

    另外一个文件 application-secrets.yml

    test:
      db:
        datasources:
          - username: root
            password: root
          - username: root
            password: root
    
    

    这样配置之后是不生效的, 并没有进行合并, 翻开源码看了一下, 确实是没有合并的,源码解析如下.

    二、 源码分析

    对了List 这种 属性的赋值, 前面的就 暂时不分析了, 直接进入重点 赋值 阶段 :

    2.1 CollectionBinder.class

    最重要的是 在 Binder.class 类里面 , 根据不同的类型 获取对应的 绑定 类 ,我们这里是List 类型, 就返回 new CollectionBinder(context);

    	private AggregateBinder<?> getAggregateBinder(Bindable<?> target, Context context) {
    		Class<?> resolvedType = target.getType().resolve(Object.class);
    		if (Map.class.isAssignableFrom(resolvedType)) {
    			return new MapBinder(context);
    		}
    		if (Collection.class.isAssignableFrom(resolvedType)) {
    			return new CollectionBinder(context);
    		}
    		if (target.getType().isArray()) {
    			return new ArrayBinder(context);
    		}
    		return null;
    	}
    

    2.2 CollectionBinder.class#bindAggregate

    针对List 类型的属性绑定,主要在 方法 bindAggregate 里面 , 详细的 在 方法 bindIndexed

    	@Override
    	protected Object bindAggregate(ConfigurationPropertyName name, Bindable<?> target,
    			AggregateElementBinder elementBinder) {
    		Class<?> collectionType = (target.getValue() != null) ? List.class : target.getType().resolve(Object.class);
    		ResolvableType aggregateType = ResolvableType.forClassWithGenerics(List.class,
    				target.getType().asCollection().getGenerics());
    		ResolvableType elementType = target.getType().asCollection().getGeneric();
    		IndexedCollectionSupplier result = new IndexedCollectionSupplier(
    				() -> CollectionFactory.createCollection(collectionType, elementType.resolve(), 0));
    		bindIndexed(name, target, elementBinder, aggregateType, elementType, result);
    		if (result.wasSupplied()) {
    			return result.get();
    		}
    		return null;
    	}
    

    2.2 CollectionBinder.class#bindIndexed

    这里就是最核心的, 从下面的逻辑我们可以看出 ,就是 通过 getSources() 获取到所有的配置文件,
    然后 依次去 获取, 如果匹配上了, 下面就 直接 return 了, 后续不再匹配,这样就导致 其他 文件里面的属性没有填充.

    这里 就是决定了List 属性是不能分在多个文件里面的

    	protected final void bindIndexed(ConfigurationPropertyName name, Bindable<?> target,
    			AggregateElementBinder elementBinder, ResolvableType aggregateType, ResolvableType elementType,
    			IndexedCollectionSupplier result) {
    		for (ConfigurationPropertySource source : getContext().getSources()) {
    			bindIndexed(source, name, target, elementBinder, result, aggregateType, elementType);
    			if (result.wasSupplied() && result.get() != null) {
    				return;
    			}
    		}
    	}
    

    三、 方案解决

    解决方案很简单 , 就是用占位符 代替啊, 弄其他的方案完全没有必要. , 而且 官方也 说了 ,不合并是刻意这么做的,可能考虑到 List 里面还会有其他的嵌套赋值 之类的 复杂情况吧

    test:
      db:
        datasources:
          - url: jdbc:mysql://localhost:3306/writedb
            username: ${test.db.datasources.write.username}
            password: ${test.db.datasources.write.password}
          - url: jdbc: mysql://localhost:3306/readdb
            username: ${test.db.datasources.read.username}
            password: ${test.db.datasources.read.password}
    
    <!-- 在另外一个里面配置如下 -->
    test:
      db:
        datasources:
          write:
            username: root
            password: root
          read:
            username: root
            password: root
    

    在这里插入图片描述

    四、 小结

    最后发现,用占位符 的方法完全可以解决, 一开始还在想其他方案, 还是 代码之上是思想 , 还需要不断的 扩展自己的思维.

    支付宝微信
    支付宝微信
    如果有帮助记得打赏哦特别需要您的打赏哦
    展开全文
  • 这里注意,由于使用这个yml的注解是属于SpringBoot的框架内进行的,因此这个属性注入只能在标有Spring的注解的类的范围内使用,不能在普通类使用。 @Autowired private TXWorkShopAlarmProperties ...
  • 一篇比较详细地总结了需要@value注入时,properties,yml格式配置文件中相关配置项写法的多种实现方式。
  • 读取ymlList集合

    千次阅读 2019-10-22 10:24:10
    yml 写个配置类 package com.mla.partjob.server.po; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.List;...
  • springboot配置文件可以是properties,也可以是yml类型,它们都支持字符型,也支持列表list类型,假定在yml配置文件中支持列表类型格式如下: application.yml demo: type: code: - 200 - 201 - 300 - 400...
  • SpringBoot加载yml 复杂对象列表

    千次阅读 2019-08-18 16:44:22
    user: list: - username: user1 password: 132456 - username: user222 password: 132456 @Component @ConfigurationProperties(prefix = "user") public class UserConfig { ...
  • ymllist

    千次阅读 2019-06-17 12:17:09
    @Value("#{'${exam.type-names}'.split(',')}") private List<String> examTypeNames;
  • 如:yml文件设置访问白名单,Config里面使用List集合接收。方法比较简单。整理如下 2、实现过程(“-”) yml文件 列表前都是‘ - ’ 加空格开头 # 访问白名单 system: whiteList: - /sso/auth/api - /...
  • 读取yml文件里的list配置

    千次阅读 2020-05-26 17:53:28
    读取yml文件里的list配置 YAML 支持以下几种数据类型: 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary) 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list) 纯量...
  • yml 配置加载list含Map数据

    千次阅读 2019-10-09 10:43:30
    一:yml配置如下: cfgPrefixPlatIds: platIds: - name: cy value: 777 - name: hzcy value: 888 - name: hzjz value: 999 二:对应配置类 @Configuration @Configurati...
  • yml文件的list,map

    千次阅读 2019-09-06 14:55:17
    country: countryConfig: aue: - lang: zh isDefault: true - lang: en isDefault: false hk: - lang: zh isDefault: true 上述所对应的java类为: @Component @Config...
  • SpringBoot的配置文件有yml和properties两种;在 SpringBoot 中我们通常使用( application.yml )来配置全局文件。所以这里以yml格式举例: 通常,一些常量,都会配置到配置文件中,... allowTypes: #定义一个list ...
  • 关于yml的介绍,java对yml的解析,yml的规范的详解。
  • 1.创建dto对象 @Data @NoArgsConstructor public class ActionDto { ...2.yml配置 action: list: - nameC: asd nameE: asd1 - nameC: qwe nameE: qwe1 3.config注入 @Data @Component @Configura.
  • SpringBoot 配置List结构
  • 最近有需求需要在yml文件中初始化list里面嵌套map,简单记录下: appconfigs: #初始化list strList: - star - moon - sun #初始化map strMap: {name: 'star',age: 25} #初始化map<String,List<Object&...
  • java代码 ...application.yml配置 需要注意的就是在属性的后面直接回车,比属性要多出两个空格然后加“-”然后加一个空格接上元素就可以了,添加其它元素的时候再回车,格式和刚才一样就可以了 ...
  • SpringBoot YML 配置List<Bean>

    千次阅读 2019-09-26 13:45:42
    异常: Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘companyNewsService’: Unsatisfied dependency expressed through field ...
  • @Value注入map、List,yaml格式

    万次阅读 多人点赞 2018-10-09 16:13:35
    使用@Value注入map、List 实体类 @Value("#{'${list}'.split(',')}") private List&lt;String&gt; list; @Value("#{${maps}}") private Map&lt;String,String&gt; maps; ...
  • sync_minutes和dblist需和yml文件中名称相同,List类型配置文件中必须对应list[0]、list[1]等等 自定义实体属性也需与yml一致,component注入spring管理bean 4.使用 @Autowired SyncDBConfig syncDBConfi.
  • springboot中支持yml的插件,不包含其他内容
  • ems: ems-real-ip-map: 127.0.0.110: Huawei-NCE-OTN 127.0.0.33: Huawei-NCE-ROADM ems-collect-config-map: Huawei-NCE-OTN: host: 127.0.0.63 ... private List pmParameter; } 个人博客:恋萌https://koimoe.com/
  • Springboot yml Map List读取

    万次阅读 2018-10-22 12:09:05
    Springboot 读取yml中的值作为参数,有2种写法: 例子: 已知有如下yml配置: myapps: 1131f78c313e11e79da3000c298bdf0e: AMS系统 1ae211c543a14cf6981274fec3281f0c: BMS系统 app1: 测试 现在需要将...
  • 14_yml语法-数组(List、Set)的写法

    千次阅读 2019-09-03 23:42:34
    用- 值表示数组中的一个元素(杠+空格) 行内写法 pets:[cat,dog,pig]
  • yml配置文件中获取list和map

    千次阅读 2019-09-23 20:45:53
    获取list:@Value("#{'${blog-list}'.split(',')}") 获取map:@Value("#{${blog-top-links}}") 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,595
精华内容 23,838
关键字:

listyml