/**
* 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/*/"));
//配置文件的优先级为 从左往右,从上往下
以上所诉 为个人理解:如有错误,请前辈指正。