spring boot(3):配置文件

一、springboot配置文件类型

1.springboot配置文件类型和作用

SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置来替换默认配置,就可以使用application.properties或者application.yml(application.yaml)进行配置。

例如端口号,项目路径,数据源等。

SpringBoot默认会从Resources目录下加载application.properties或者application.yml(application.yaml)文件。其中properties文件是用键值对形式存储,大家应该都会用,下面说一下yml文件。

配置文件的优先级

properties>yaml>yml(因为最后加载的是properties文件,所以会覆盖掉之前的yml配置文件)

2.application.yml配置文件

springboot默认加载resources文件夹下面的application开头的yml或properties文件。

yml文件简介

yml文件是YAML(YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,其中被支持YAML库的不同的编程语言程序导入,比如C/C++,Ruby,Python.Perl,C#,PHP等。YML文件是以数据为核心,比传统的xml文件更加简洁。

YML文件的扩展名可以是,yml和.yaml。

yml配置文件的语法

配置普通数据
  • 语法:key: value
  • 示例代码
name: zhangsan
  • 注意:value之前有一个空格
配置对象数据
  • 语法:
  • key:
  • key1:value1
  • key2:value2
  • 或者:
  • key:{key1:value1,key2:value2}
  • 实例代码:
person:
  name: zhangsan
  age: 23
  address: zhengzhou
  
#或者
person: {name: zhangsan,age: 23,address: zhengzhou}

注意:key1前面的空格个数不限,在yml语法中,相同缩进代表同一个级别

配置map数据

与上面的配置对象数据相同

配置数组(List、Set)数据
  • 语法:
  • key:
  • value1
  • -value2
  • 或者:
  • key:[value1,value2]
  • 实例代码:
city: 
 - beijing
 - changsha
 - zhengzhou
 - shanghai
#或者
city: [beijing,changsha,zhengzhou,shanghai]
#配置对象数组
student:
 - name: tom
   age: 18
   address: beijing
 - name: rabbit
   age: 17
   address: zhenghzou
#行内样式配置对象数组
student: [{name: tom,age: 18,address: beijing},{name: rabbit,age: 17,address: zhengzhou}]

注意:-后面要有空格

二、配置文件与配置类的属性映射

1.使用注解@Value映射

我们可以使用@Value注解将配置文件中的值映射到一个Spring管理的Bean的字段上

例如:

application.properties配置如下:

name=wangwu

student.name=zhaoliu
student.age=66
student.address=shijiazhuang

application.yml配置如下:

name: 张三
student: 
  name: 李四
  age: 24
  address: 郑州

测试类代码如下:

package com.test.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class Student {
	@Value("${name}")
	private String name;
	@Value("${student.address}")
	private String address;
	@ResponseBody
	@RequestMapping("/test")
	public String test() {
		return "name:"+name+",address:"+address;
	}
}

该种方式的优缺点:

优点:匹配字段更加精确。

缺点:如果字段过多需要每个属性都设置@Value注解

2.使用注解@ConfigurationProperties映射

通过注解@ConfigurationProperties(prefix=“配置文件种key的前缀”)可以将配置文件中的配置自动与实体进行映射

appication.properties配置如下:

name=wangwu

student.name=zhaoliu
student.age=66
student.address=shijiazhuang

application.yml配置如下:

name: 张三
student: 
  name: 李四
  age: 24
  address: 郑州

测试类代码如下

package com.test.controller;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ConfigurationProperties("student")
public class Student1 {
	private String name;
	private String address;
	
	@ResponseBody
	@RequestMapping("/test1")
	public String test1() {
		return "name:"+name+",address:"+address;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}
}

这里我们会发现编译器会有警告,没有添加@ConfigurationProperties的执行器。(虽然没有配置也能成功),配置完成之后,在properties文件或者yml文件中会出现对应的提示。配置在pom.xml文件中

代码如下:

<!-- @ConfigurationProperties执行器的配置 -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-configuration-processor</artifactId>
		<optional>true</optional>
	</dependency>