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>