配置文件简介
Spring Boot 中的配置文件有两种格式,properties 或者 yaml,一般情况下,两者可以任意使用,但是他们还是有一些本质上的区别的,本文主要介绍yaml 配置,最后再来看看 yaml 和 properties 配置文件的区别
文件位置
首先application.yaml 在 Spring Boot 中可以写在四个不同的位置,分别是如下位置:
1.项目根目录下的config目录中
2.项目根目录下
3. Classpath中的config
4. classpath
四个位置中的 application.yaml 文件的优先级按照上面列出的顺序依次降低。即如果有同一个属性在四个文件中都出现了,优先级高的为准。同时,开发者可以自己指定yaml文件的名字,但是如果自定义之后,需要指定配置文件的位置
如图:
这是在idea中配置的,若项目已经打成jar包之后,那么需要在项目启动时加入如下参数 java -jar myproject.jar --spring.config.name=app
这样配置之后,在项目启动时,就会按照上面所说的四个位置按顺序去查找一个名为app.yaml 的文件。当然这四个位置也不是一成不变的,也可以自己定义,有两种方式,一个是使用spring.config.location 属性,另一个则是使用 spring.config.additional-location 这个属性,在第一个属性中,表示自己重新定义配置文件的位置,项目启动时就按照定义的位置去查找配置文件,这种定义方式会覆盖掉默认的四个位置,也可以使用第二种方式,第二种方式则表示在四个位置的基础上,再添加几个位置,新添加的位置的优先级大于原本的位置。
配置方式如图
此处注意,配置文件位置时,值一定要以/结尾
数组注入
Yaml也支持数组注入,例如
my:
servers:
- my1.example.com
- my2.example.com
这段数据可以绑定到一个带Bean的数组当中
@ConfigurationProperties(prefix="my")
@Component
public class Config {
private List<String> servers = new ArrayList<String>();
public List<String> getServers() {
return this.servers;
}
}
项目启动后,配置中的数组会自动存储到server集合中,当然,yaml中不止可以存储数组,也可以在存储对象,
redis:
redisConfigs:
- host: 192.168.66.1
port: 1111
- host: 192.168.0.10
port: 1111
这个就可以被注入如下类中
@Component
@ConfigurationProperties(prefix = "redis")
public class MyRedis {
private List<SingleRedisConfig> redisConfigs;
}
优缺点
不同于properties 文件的无序, yaml 配置是有序的,这一点在有些配置中是非常有用的,例如在 Spring Cloud Zuul 的配置中,当我们配置代理规则是,顺序就显得尤为重要了。当然 yaml 配置也不是万能的,例如 yaml 配置目前不支持 @PropertySource 注解
本人创业团队产品MadPecker,主要做BUG管理、测试管理、应用分发
网址:www.madpecker.com,有需要的朋友欢迎试用、体验!
本文为MadPecker技术人员编写,转载请标明出处