SpringBoot 加载不出来application.yml文件
2018-02-01 22:43
411 查看
摘要
记录一次SpringBoot加载不出来application.yml文件的问题解决过程问题
配置了application.yml文件,但是映射到properties bean的时候失败@ConfigurationProperties( prefix = "com.fs" ) public class DemoProperties { private String serviceName; public DemoProperties() { } public String getServiceName() { return this.serviceName; } public void setServiceName(String serviceName) { this.serviceName = serviceName; } }
问题分析
分析1:首先怀疑是application.yml文件没有打包到classpath下,这个是最直接的原因,使用的是maven 构建工具在target 目录下面生成的war中看到了这个文件,排除了这个原因
分析2: DemoProperties文件配置不对
检查发现,@ConfigurationProperties 注解有,setter,getter方法有。不放心debug了一下
发现propertySource中没有application.yml文件的值,一个正常的application.yml文件加载情况应该是这样的
分析3:
这时候根据常识已经找不出问题了,只能看源码了
这篇文章已经写过时序分析了,就不赘述了
http://blog.csdn.net/liaokailin/article/details/48878447
根据时序图可以大致猜测问题发生在load阶段,即加载properties文件阶段。PropertySourceLoader接口中load方法实际读取properties文件。这个接口有两个实现PropertiesPropertySourceLoader,解析后缀名为”properties”, “xml”的application配置文件YamlPropertySourceLoader解析后缀名为”yml”, “yaml”的application配置文件
看下YamlPropertySourceLoader的实现
public PropertySource<?> load(String name, Resource resource, String profile) throws IOException { if(ClassUtils.isPresent("org.yaml.snakeyaml.Yaml", (ClassLoader)null)) { YamlPropertySourceLoader.Processor processor = new YamlPropertySourceLoader.Processor(resource, profile); Map<String, Object> source = processor.process(); if(!source.isEmpty()) { return new MapPropertySource(name, source); } } return null; }
我的天,一眼看出来可能会有问题,判断org.yaml.snakeyaml.Yaml类是否存在,否则返回null
解决
pom文件中加上snakeyaml依赖<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>${snakeyaml.version}</version> </dependency>
关注我的公众号NoSQL开发,了解NoSQL技术及web开发技术
参考
http://blog.csdn.net/liaokailin/article/details/48878447相关文章推荐
- SpringBoot启动时是如何加载配置文件application.yml文件
- springboot配置文件 application.yml注意事项(Failed to load property source from location 'classpath:/applica)
- spring boot 读取配置文件(application.yml)中的属性值
- springboot 修改启动时默认加载application.properties文件以及加载指定配置文件
- SpringBoot配置文件application.yml (application.properties)
- spring boot配置文件:application.yml (yml与properties文件优缺对比)
- 请慎用spring-ClassPathXmlApplicationContext手动加载spring配置文件
- applicationContext.xml文件中怎么配置struts2和spring配置文件的加载路径
- Spring Boot系列 - 4. 读取配置文件(application.yml)中的属性值
- application.properties或application.yml 文件中常用属性介绍
- 详解Spring Boot加载properties和yml配置文件
- spring boot 读取配置文件(application.yml)中的属性值
- ApplicationContext.xml中加载properties配置文件
- spring boot 读取配置文件(application.yml)中的属性值
- springboot如何读取配置文件(application.yml)中的属性值
- springboot读取yml中的配置加载到javabean中
- iOS 加载本地HTML文件,图片没显示出来的问题
- springboot 将yml文件内容注入javaBean
- ClassPathXmlApplicationContext加载多个XML文件
- 请慎用spring-ClassPathXmlApplicationContext手动加载spring配置文件