背景:最近搞新项目,重新搭建一套基于SpringBoot的开发框架。
查看debug日志,发现很奇怪的一行日志
Skipped (empty) config file 'file:/E:/workspace/union-service/union-service-dao/target/test-classes/application.yml' (classpath:/application.yml)
明明不是空的!怀疑文件名不对,确认并重试了几次,仍然不行,只能调试了。
调试到了PropertySourcesLoader这个类
public PropertySource load(Resource resource, String group, String name, String profile) throws IOException {if (isFile(resource)) { String sourceName = generatePropertySourceName(name, profile); for (PropertySourceLoader loader : this.loaders) { if (canLoadFileExtension(loader, resource)) { PropertySource specific = loader.load(sourceName, resource, profile); addPropertySource(group, specific, profile); return specific; } }}return null;}
YamlPropertySourceLoader类的load方法:
@Overridepublic PropertySource load(String name, Resource resource, String profile) throws IOException {if (ClassUtils.isPresent("org.yaml.snakeyaml.Yaml", null)) { Processor processor = new Processor(resource, profile); Mapsource = processor.process(); if (!source.isEmpty()) { return new MapPropertySource(name, source); }}return null;}
查找" org.yaml.snakeyaml.Yaml"类,如果不存在,就返回null。我的项目代码修改倒也简单,添加snakeyaml的依赖即可。
但是SpringBoot代码执行到这里,说明已经存在resource文件,因为没有解析yaml的类跳过去,再去找其他适合的配置文件,也说的过去,可是为啥不能打个日志提示一下粗心又顽强的码农们呢?
感觉修改一下比较好,类似这样:
@Overridepublic PropertySource load(String name, Resource resource, String profile) throws IOException {if (ClassUtils.isPresent("org.yaml.snakeyaml.Yaml", null)) { Processor processor = new Processor(resource, profile); Mapsource = processor.process(); if (!source.isEmpty()) { return new MapPropertySource(name, source); }} else { logger.warn("Found " + name + " while lacking of snakeyaml");}return null;}
相关issue已在github提交给spring boot。