Spring Boot2.0 - 加载配置文件的正确姿势

在这里插入图片描述

一.语法介绍

关于YAML语法,网上有很多入口资料,这里不一一赘述,大家可以参考下面这边博客学习

YAML基本语法

二.yml和properties的区别

举个例子,请看以下的yaml语法;

environments:
	dev:
		url: https://dev.example.com
		name: Developer Setup
	prod:
		url: https://another.example.com
		name: My Cool App

前面的示例将转换为以下属性:

environments.dev.url=https://dev.example.com
environments.dev.name=Developer Setup
environments.prod.url=https://another.example.com
environments.prod.name=My Cool App

列表表示为具有[index]解除引用的属性键。例如,考虑以下YAML:

my:
servers:
	- dev.example.com
	- another.example.com

前面的示例将转换为这些属性:

my.servers [0] = dev.example.com
my.servers [1] = another.example.com

总结:

  1. 在properties文件中是以”.”进行分割的, 在yml中是用”:”进行分割;
  2. yml的数据格式和json的格式很像,都是K-V格式,并且通过”:”进行赋值;
  3. 在yml中缩进一定不能使用TAB,否则会报很奇怪的错误;(缩进特么只能用空格!!!!)
  4. 每个k的冒号后面一定都要加一个空格;
在SpringBoot中,推荐使用properties或者YAML文件来完成配置,但是对于较复杂的数据结构来说,YAML又远远优于properties。本文接下来主要围绕YAML配置文件来学习SpringBoot项目中配置文件的加载。

三.配置文件加载

首先,我们搭建自己的测试模块,如下图所示

在这里插入图片描述

3.1application.yml

根据上面学习的YAML语法,我们创建如下的配置文件信息,接下来我们要测试Spring Boot的两种配置文件加载方式;

# 开发环境配置
server:
  port: 8081
  servlet:
    # 项目contextPath
    context-path: /miloyaml

#测试@ConfigurationProperties注解注入属性
milo-attributes:
  value: 345                          #对应单个值
  valueArray: 1,2,3,4,5,6,7,8,9      #对应数组
  valueList:                         #对应list
    -13579
    -246810
  valueMap:                          #对应map
    name: lili
    age: 20
    sex: female
  valueMapList:                      #对应list<map>
    - name: bob
      age: 21
    - name: caven
      age: 31

#测试@Value注解注入属性
value: "milo"
list: topic1,topic2,topic3
maps: "{key1: 'value1', key2: 'value2'}"


3.2@ConfigurationProperties

首先,我们需要在pom文件中引入如下依赖:

	<dependencies>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>
        
       <!--lombok插件-->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		
	</dependencies>

接下来,我们创建配置类YamlConfig,它的作用是接受配置文件中的配置信息;项目启动之后,会将配置文件中前缀为milo-attributes的配置信息自动填充到对应的字段;

@Component
@Getter
@Setter
@ConfigurationProperties(prefix = "milo-attributes")
@ToString
 public class YamlConfig {
    private String value;
    private String[] valueArray;
    private List<String> valueList;
    private HashMap<String, String> valueMap;
    private List<Map<String, String>> valueMapList;
}

最后,我们创建测试类YamlController

@Controller
@RequestMapping("/yaml")
public class YamlController {

    @Autowired
    private YamlConfig yamlConfig;

    @Autowired
    private ValueConfig valueConfig;

    @RequestMapping("/index1")
    @ResponseBody
    public String index1(){
        return yamlConfig.toString();
    }
}

我们一起来看看测试结果:

访问地址:http://localhost:8081/miloyaml/yaml/index1

在这里插入图片描述

从上图中我们看到,配置文件中的信息自动填充到YamlConfig类的对应字段中,然后响应到浏览器;

3.3@Value

现在,我们来将刚才的代码做一些修改,来测试@Value是如何加载配置文件中的信息;

首先我们创建配置类ValueConfig

@Component
@Getter
@Setter
@ToString
public class ValueConfig {

    @Value("${value}")
    private String value;

    @Value("#{'${list}'.split(',')}")
    private List<String> list;

    @Value("#{${maps}}")
    private Map<String,String> maps;

}

接下来,我们在YamlController中新增方法用于测试@Value

@Controller
@RequestMapping("/yaml")
public class YamlController {

    @Autowired
    private YamlConfig yamlConfig;

    @Autowired
    private ValueConfig valueConfig;

    @RequestMapping("/index1")
    @ResponseBody
    public String index1(){
        return yamlConfig.toString();
    }

    @RequestMapping("/index2")
    @ResponseBody
    public String index2(){
        return valueConfig.toString();
    }
}

我们一起来看看测试结果:

访问地址:<http://localhost:8081/miloyaml/yaml/index2

在这里插入图片描述

从上图中我们看到,配置文件中的信息自动填充到ValueConfig类的对应字段中,然后响应到浏览器;

3.4@ConfigurationProperties和@Value的比较

在这里插入图片描述

四.总结

本篇文章我们主要学习了SpringBoot框架yml配置文件的加载方式,至于更多的配置,还需要大家去探索学习,谢谢大家;

示例代码
关于本篇文章的代码大家可参加项目中的milogenius-yaml模块

参考文献
1.properties与yml之间的比较

返回专栏目录
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值