目录
2.使用@ConfigurationProperties读取配置文件中数据
项目结构:
一、YAML文件_配置文件介绍
https://docs.spring.io/spring-boot/docs/2.7.0-M1/reference/htmlsingle/#application-properties.server 可以查找配置文件如何覆盖SpringBoot 项目的默认配置。
除了 properties 文件外, SpringBoot 还支持 YAML 文件进行配置。YAML文件的扩展名为 .yml 或 .yaml ,它的基本要求如下:1.大小写敏感
2.使用缩进代表层级关系
3.相同的部分只出现一次
比如使用properties文件配置tomcat端口:
server.port=8888
而使用YAML文件配置tomcat端口:
server :port : 8888
二、YAML文件_自定义配置简单数据
语法:
数据名: 值
示例代码:
name : zhangsan
注意:value之前有一个空格,即zhangsan于冒号之间一定要有一个空格隔开。
三、YAML文件_自定义配置对象数据
语法:
对象 :属性名 1 : 属性值属性名 2 : 属性值# 或者对象 : { 属性名 1 : 属性值 , 属性名 2 : 属性值 }
示例代码:
# 学生 1student1 :sex : femaleage : 10address : beijing# 学生 2student2 : { sex : female , age : 10 , address : beijing }
属性名前面的空格个数不限,在 yml 语法中,相同缩进代表同一个级别,只要每个属性前的空格数一样即可。
四、YAML文件_自定义配置集合数据
语法:
集合 :- 值 1- 值 2# 或者集合 : [ 值 1 , 值 2 ]
示例代码 :# 城市city1 :- beijing- tianjin- shanghai- chongqingcity2 : [ beijing , tianjin , shanghai , chongqing ]# 集合中的元素是对象类型students :- name : baizhanage : 18score : 100- name : shangxuetangage : 28score : 88- name : chengxuyuanage : 38score : 90
注意:值与前面的 - 之间存在一个空格,变量名和值之间也存在一个空格,千万不能错,不然无法赋值。
五、YAML文件_读取配置文件的数据
1. 使用@Value读取配置文件中数据
server:
port: 8888
# 管理员用户名
name: zhangsan
# 学生1
student1:
sex: female
age: 10
address: beijing
#学生2
student2: {sex: female,age: 10,address: beijing}
# 城市
city1:
- beijing
- shanghai
- shenzhen
- guangzhou
city2: [beijing,shanghai,shenzhen,guangzhou]
students:
- name: zhangsan
age: 18
score: 88
- name: lisi
age: 19
score: 89
- name: wangli
age: 20
score: 100
2.读取配置文件数据:
@Controller
public class YmlController1 {
//基本数据类型直接赋值
@Value("${name}")
private String name;
//对象类型:对象.属性名
@Value("${student1.age}")
private int age;
//集合基本数据类型:集合元素
@Value("${city1[0]}")
private String city1;
//集合对象类型:集合元素下标.对象属性名
@Value("${students[0].score}")
private double score1;
@RequestMapping("/yml1")
@ResponseBody
public String yml1(){
System.out.println(name);
System.out.println(age);
System.out.println(city1);
System.out.println(score1);
return "hello,SpringBoot";
}
}
3.运行结果:
注意:@Value只能映射简单数据类型,不能将yaml文件中的对象、集合映射到属性中,但可以映射对象、集合中的单个数据。
2.使用@ConfigurationProperties读取配置文件中数据
通过 @ConfigurationProperties(prefix="对象") 可以将配置文件中的配置自动与实体进行映射,这样可以将yml文件中配置的对象属性直接映射到Bean当中。
1.配置文件:
user:
#基本数据类型
id: 1000
username: chengxuyuan
#集合基本数据类型
address:
- beijing
- shanghai
- shenzhen
- guangzhou
#对象类型
grades:
- subject: math
score: 100
- subject: english
score: 100
2.实体类:
public class Grade {
private String subject;
private double score;
// 省略getter/setter/tostring
}
3.读取配置文件 :
@Controller
//@ConfigurationProperties(prefix = "user")
//将配置文件中user对象与此实体类进行一一映射
@ConfigurationProperties(prefix = "user")
public class YmlController2 {
private int id;
private String username;
private List<String> address;
private List<Grade> grades;
@RequestMapping("/yml2")
@ResponseBody
public String yml2(){
System.out.println(id);
System.out.println(username);
System.out.println(address);
System.out.println(grades);
return "hello,SpringBoot";
}
// 省略getter/setter/tostring
4.运行结果:
六、YAML文件_占位符的使用
YAML文件中可以使用 ${} 占位符,它有两个作用:
1.使用配置文件中的值
1.编写配置文件
server:
port: 8888
myconfig:
myport: ${server.port}
2.读取配置文件
@Controller
public class YmlController3 {
@Value("${myconfig.myport}")
private int port;
@RequestMapping("/yml3")
@ResponseBody
public String yml3(){
System.out.println(port);
return "hello,SpringBoot";
}
}
3.运行结果:
2.使用框架提供的随机生成数方法
SpringBoot框架提供了一些生成随机数的方法可以在yml文件中使用:${random.value} :生成类似 uuid 的随机数,没有 "-" 连接${random.uuid} :生成一个 uuid ,有短杠连接${random.int} :随机取整型范围内的一个值${random.int(10)} :随机生成一个 10 以内的数${random.int(100,200)} :随机生成一个 100-200 范围以内的数${random.long} :随机取长整型范围内的一个值${random.long(100,200)} :随机生成长整型 100-200 范围内的一个值
用法如下:# 随机生成tomcat端口 server: port: ${random.int(1024,9999)}
注意:端口号设置为1024-9999是因为:小于1024数值的端口号一般都被系统占用,一般没有5位数的端口号。
七、YAML文件_配置文件存放位置及优先级
配置文件优先级按由高到低有如下存放位置:项目根目录下的 /config 子目录中项目根目录下项目的 resources 下的 /config 子目录中项目的resources 目录中
项目根目录下的/config子目录中config/application.propertiesconfig/application.yml项目根目录下application.propertiesapplication.yml项目的resources下的/config子目录中resources/config/application.propertiesresources/config/application.yml项目的resources目录中resources/application.propertiesresources/application.yml优先级高的文件会覆盖优先级低的文件中的配置 ,同级目录下application.properties优先级大于application.yml
八、YAML文件_bootstrap配置文件
bootstrap配置文件特征:boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载。boostrap 里面的属性不能被覆盖。
bootstrap与application的应用场景:application 配置文件主要用于 SpringBoot 项目的自动化配置。bootstrap 配置文件有以下几个应用场景(主要用于分布式项目中):1.使用Spring Cloud Config 配置中心时,需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息。2.一些固定的不能被覆盖的属性。3.一些加密/ 解密的场景
九、知识点整理:
1.SpringBoot配置文件格式为“properties和yaml”
2.关于YAML文件,说法错误的是“大小写不敏感”
3.在YAML中,冒号与值之间要有一个“空格”
4.在yml语法中,“相同缩进”代表同一个级别
5.yml配置集合时,-与值之间要有“空格”
6.使用“@Value ”注解可以将配置文件中的值映射到Bean的属性中
7.使用“@ConfigurationProperties ”注解可以将配置文件中的对象自动与实体Bean进行映射
8.在SpringBoot中的yml文件中,“${random.int(10)} ” 生成一个10以内的随机整数
9.关于SpringBoot配置文件,“bootstrap比applicaton优先加载”
10.在SpringBoot中,bootstrap配置文件支持的格式为“properties和yaml”