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值,即可获取到值
因为相信,所以看见.