Spring启动时,加载application.yml

发布时间 2023-08-03 10:24:13作者: 追风fc

Spring启动时,可以加载application.yml配置文件,读取到内存,方面后续项目里直接取用,很方便。下面主要从应用层面说明下如何使用。

一. 加载顺序

1.当前项目目录下找到config目录,加载里面的application.yml文件

2.当前项目目录下,加载application.yml文件

3.classpath下config目录,加载里面的application.yml文件

4.classpath下,加载application.yml文件

一般来说,项目里不会有很多配置文件,就不需要在额外新建config文件夹,所以一般用2,4就可以了。

第4种方式需要依赖项目,改完配置文件后需要重新打包生效。第2种不依赖项目,这样直接修改配置文件后不需要重新打包,重启服务就可以生效。

根据实际情况,从安全性和方便性考虑选择哪种配置方法。

另外,和双亲委托类似,加载配置文件也是优先考虑高优先级,高优先级加载到就不再加载低优先级的配置文件。

 

二. 配置文件里配置内容

        首先需要先写前缀,常见的配置内容包括String,Integer,Boolean,List,Map,对象,参考下图



三. 写读取配置文件对应的类

写一个配置类,加上ConfigurationProperties注解,加上prefix值

加 Component注解

加Data注解,如果不加的话需提供set方法,赋值时底层采用反射完成

 

四. 使用

由于在配置类上加上注解Compent,那么其他类里注入后,即可调用获取属性值。

实际场景加载配置文件后值不应该可以变动,所以一般也可以设置为类的静态变量,项目中可直接获取,如下图



可以看到springboot的application.yml配置文件可以替换原来.properties文件,相比properties仅可以配置字符串,yml还可以配置其他类型的值。

 

-----------------------------------------------

下面回顾下springboot加载properties文件的常用写法

1. 在resource文件夹下新建一个配置文件,比如my.properties,里面配置键值对

 

2. 写一个配置类,加@PropertySource("classpath:my.properties"),读取指定的配置文件,如果不写默认读取application.properties文件

3. 配置类里定义读取配置文件的属性,加@Value注解,指定key

4. 通常我们可以进一步定义静态属性,供外部取值

举例代码如下

 

这里我们这里可以看到,无参构造里还没有给属性赋值,@PostConstruct里已经给属性赋值了。

-----------------------------------------------

补充:

用工具类写一个读取配置文件文件的方法

1.在resource文件夹下新建一个配置文件,比如config.properties,里面配置键值对

2.新建一个工具类,比如FileUtil,写一个静态方法获取配置文件

 

/**
* 读取properties文件
*
* @param fileName config.properties
* @return
*/
public static Properties readPro(String fileName) {
Properties p = new Properties();
//获取文件流
InputStream resourceAsStream = null;
try {
resourceAsStream = FileUtil.class.getClassLoader().getResourceAsStream(fileName);
p.load(resourceAsStream);
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(resourceAsStream);
}
// 如果没有对应的键值对,返回null;值前面的空格会忽略,后面的空格也算值
return p;
}

3. 获取到Properties对象后,调用getProperty(String key),传入key值,即可获取到值