yaml配置简介

954

配置文件简介

   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技术人员编写,转载请标明出处