SpringBoot 加载不出来application.yml文件

摘要

记录一次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>

关注【方丈的寺院】,第一时间收到文章的更新,与方丈一起开始技术修行之路
在这里插入图片描述

参考

http://blog.csdn.net/liaokailin/article/details/48878447

发布了164 篇原创文章 · 获赞 319 · 访问量 49万+
展开阅读全文

spring boot 读取.yml失败

07-23

1、application.yml ``` spring: profiles: active: dev datasource: url: jdbc:mysql://192.168.2.201:3306/pmsd?useUnicode=true&characterEncoding=utf8&ssl=false username: app_pmsd password: 635151_Itp driver-class-name: com.mysql.jdbc.Driver druid: initial-size: 1 minIdle: 5 maxActive: 20 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 ```` 2、DataSourceProperties.java ``` @Component @ConfigurationProperties(prefix = "spring.datasource") public class DataSourceProperties { private String url; public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } } ``` 3、MybatisConfigurer.java ``` @Configuration public class MybatisConfigurer { @Autowired private DataSourceProperties dataSourceProperties; @Bean(name = "dataSource") public DataSource dataSource() { DruidDataSource druidDataSource = new DruidDataSource(); druidDataSource.setUrl(dataSourceProperties.getUrl()); //druidDataSource.setUsername(dataSourceProperties.getUserName()); //druidDataSource.setPassword(dataSourceProperties.getPassWord()); //druidDataSource.setDriverClassName(dataSourceProperties.getDriverClassName()); return druidDataSource; } } ``` 4、pom.xml有引用 ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> ``` 代码如上,我在获取dataSourceProperties得到的是null,请问各位大神是哪里写的不对呢?谢谢 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie

分享到微信朋友圈

×

扫一扫,手机浏览