Spring Boot中的yaml配置

本文介绍了Spring Boot中yaml配置的使用,包括配置文件的位置、数组注入方式以及yaml配置的优缺点。yaml配置文件可以在四个不同位置加载,优先级依次降低。通过指定参数,可以自定义配置文件名和位置。yaml支持数组注入,可以绑定到Bean数组或包含复杂对象的集合中。相比于properties,yaml配置有序,有利于某些场景下的配置管理,但不支持@PropertySource注解。

配置简介

    Spring Boot 中的配置文件有两种格式,properties 或者 yaml,一般情况下,两者可以随便使用,选择自己顺手的就行了,那么这两者完全一样吗?肯定不是了!本文主要重点介绍 yaml 配置,最后再来看看 yamlproperties 配置有何区别。

文件位置

首先 application.yaml 在 Spring Boot 中可以写在四个不同的位置,分别是如下位置:

  1. 项目跟目录下的 config 目录中
  2. 项目跟目录下
  3. classpath下的config目录中
  4. classpath目录下

    四个位置中的 application.yaml 文件的优先级按照上面列出的顺序依次降低。即如果有同一个属性在四个文件中都出现了,以优先级高的为准。
  那么 application.yaml 是不是必须叫 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:
	- dev.example.com
	- another.example.com

这段数据可以绑定到一个带 Bean 的数组中:

@ConfigurationProperties(prefix="my")
@Component
public class Config {

	private List<String> servers = new ArrayList<String>();

	public List<String> getServers() {
		return this.servers;
	}
}

项目启动后,配置中的数组会自动存储到 servers 集合中。当然,yaml 不仅可以存储这种简单数据,也可以在集合中存储对象。
例如:

redis:
  redisConfigs:
    - host: 192.168.66.128
      port: 6379
    - host: 192.168.66.129
      port: 6380

这个可以被注入到如下类中:

@Component
@ConfigurationProperties(prefix = "redis")
public class RedisCluster {
    private List<SingleRedisConfig> redisConfigs;
	//省略getter/setter
}

优缺点

不同于 properties 文件的无序, yaml 配置是有序的,这一点在有些配置中是非常有用的,例如在 Spring Cloud Zuul 的配置中,当我们配置代理规则是,顺序就显得尤为重要了。当然 yaml 配置也不是万能的,例如 yaml 配置目前不支持 @PropertySource 注解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值