SpringBoot配置文件优先级

/**
	 * Default search locations used if not {@link #LOCATION_PROPERTY} is found.
	 */
    /**
    *springboot 加载配置文件的位置 DEFAULT_SEARCH_LOCATIONS就是我们最后确定的配置文件
    *List<ConfigDataLocation> locations = new ArrayList<>(); locations存放配置文件路径的数组
    */
	static final ConfigDataLocation[] DEFAULT_SEARCH_LOCATIONS;
	static {
		List<ConfigDataLocation> locations = new ArrayList<>();
	locations.add(ConfigDataLocation.of("optional:classpath:/;optional:classpath:/config/"));
    locations.add(ConfigDataLocation.of("optional:file:./;optional:file:./config/;optional:file:./config/*/"));

        //toArray() 按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组;ConfigDataLocation[0]是占位的因为	     
//定义的时候不知道其长度。
        //所以数组中是从"classpath:/" 到"file:./config/*/" 的一个顺序
        //加载时会从数组的开头开始一直到最后,因此后面的会覆盖掉前面的
      
		DEFAULT_SEARCH_LOCATIONS = locations.toArray(new ConfigDataLocation[0]);
	}

/**
* ConfigDataLocation 类中的of方法
* public static final String OPTIONAL_PREFIX = "optional:";
*/
	public static ConfigDataLocation of(String location) {
        /**
        *location不为空,且以 "optional:"开头时 optional为ture
        */
		boolean optional = location != null && location.startsWith(OPTIONAL_PREFIX);
        /**
        *optional为true时 value为 location.substring(OPTIONAL_PREFIX.length())这串表达式
        *因为OPTIONAL_PREFIX = "optional:" 所以截取出的字符串应为 "classpath:/" 这种的。因为是 "optional:"开头			    *location.substring(OPTIONAL_PREFIX.length())就是把 "optional:"本身给删除掉
        *最后判断value是否为空为空返回null,不为空将处理后的ConfigDataLocation对象返回
        */
		String value = (!optional) ? location : location.substring(OPTIONAL_PREFIX.length());
		if (!StringUtils.hasText(value)) {
			return null;
		}
		return new ConfigDataLocation(optional, value, null);
	}


//综上所述 
    
//locations.add(ConfigDataLocation.of("optional:classpath:/;optional:classpath:/config/"));
//locations.add(ConfigDataLocation.of("optional:file:./;optional:file:./config/;optional:file:./config/*/"));

//配置文件的优先级为 从左往右,从上往下

/**
     * Default search locations used if not {@link #LOCATION_PROPERTY} is found.
     */
    /**
    *springboot 加载配置文件的位置 DEFAULT_SEARCH_LOCATIONS就是我们最后确定的配置文件
    *List<ConfigDataLocation> locations = new ArrayList<>(); locations存放配置文件路径的数组
    */
    static final ConfigDataLocation[] DEFAULT_SEARCH_LOCATIONS;
    static {
        List<ConfigDataLocation> locations = new ArrayList<>();
    locations.add(ConfigDataLocation.of("optional:classpath:/;optional:classpath:/config/"));
    locations.add(ConfigDataLocation.of("optional:file:./;optional:file:./config/;optional:file:./config/*/"));

        //toArray() 按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组;ConfigDataLocation[0]是占位的因为         //定义的时候不知道其长度。
        //所以数组中是从"classpath:/" 到"file:./config/*/" 的一个顺序
        //加载时会从数组的开头开始一直到最后,因此后面的会覆盖掉前面的
      
        DEFAULT_SEARCH_LOCATIONS = locations.toArray(new ConfigDataLocation[0]);
    }

/**
* ConfigDataLocation 类中的of方法
* public static final String OPTIONAL_PREFIX = "optional:";
*/
    public static ConfigDataLocation of(String location) {
        /**
        *location不为空,且以 "optional:"开头时 optional为ture
        */
        boolean optional = location != null && location.startsWith(OPTIONAL_PREFIX);
        /**
        *optional为true时 value为 location.substring(OPTIONAL_PREFIX.length())这串表达式
        *因为OPTIONAL_PREFIX = "optional:" 所以截取出的字符串应为 "classpath:/" 这种的。因为是 "optional:"开头                *location.substring(OPTIONAL_PREFIX.length())就是把 "optional:"本身给删除掉
        *最后判断value是否为空为空返回null,不为空将处理后的ConfigDataLocation对象返回
        */
        String value = (!optional) ? location : location.substring(OPTIONAL_PREFIX.length());
        if (!StringUtils.hasText(value)) {
            return null;
        }
        return new ConfigDataLocation(optional, value, null);
    }


//综上所述 
    
//locations.add(ConfigDataLocation.of("optional:classpath:/;optional:classpath:/config/"));
//locations.add(ConfigDataLocation.of("optional:file:./;optional:file:./config/;optional:file:./config/*/"));

//配置文件的优先级为 从左往右,从上往下

 以上所诉 为个人理解:如有错误,请前辈指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值