目录
一.配置文件介绍
二.自定义配置简单数据
三.自定义配置对象数据
四.自定义配置集合数据
五.读取配置文件的数据
六.使用@ConfigurationProperties读取
七.占位符的使用
八.配置文件存放位置及优先级
九.bootstrap配置文件
一.配置文件介绍
SpringBoot 项目中,大部分配置都有默认值,但如果想替换默认配置的话,就可以使用application.properties 或者 application.yml 进行配置。
SpringBoot 默认会从 resources 目录下加载 application.properties或application.yml 文件。其中, application.properties 文件是键值对类型的文件,之前一直在使用,所以我们不再对properties 文件
进行阐述。
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文件中 配置其他信息以便我们在项目中使用。配置简单数据的方式如下:
语法 :
数据名 : 值
application.properties中应该也行,我就不试了。
示例代码:
name :[空格] Tom
注意:value之前有一个空格(key: value)
三.自定义配置对象数据
语法:
对象:
属性名1 :[空格] 属性值
属性名2 :[空格] 属性值
# 或者
对象 :[空格]{ 属性名 1 :[空格] 属性值 , 属性名 2 :[空格] 属性值 }
示例代码:
# 学生 1
student1 :
sex : female
age : 10
address : beijing
# 学生 2
student2 : { sex : female , age : 10 , address : beijing }
属性名前面的空格个数不限,在yml语法中,相同缩进代表同一 个级别,只要每个属性前的空格数一样即可。
四.自定义配置集合数据
语法
集合 :
-[空格] 值1
-[空格] 值2
# 或者
集合 :[空格][ 值 1 , 值 2 ]
示例:
#自定义配置集合数据 #城市 city1: - beijing - tianjin - shanghai - chongqing city2: [beijing,tianjin,shanghai,chongqing] #元素是对象的集合 students: - name: Jack age: 18 score: 100 - name: Sam age: 28 score: 88 - name: li age: 27 score: 90
注意:值与之前的 - 之间存在一个空格
五.读取配置文件的数据
使用@Value读取
我们可以通过 @Value 注解将配置文件中的值映射到一个 Spring 管理的Bean 的字段上,用法如下:
1
配置文件
读取配置文件数据:
@Value 只能映射简单数据类型,不能将 yaml 文件中的对象、集合映射到属性中。
在controller包下创建一个YmlController1类
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 YmlController1 {
@Value("${name}")
private String name;
@Value("${student1.age}")
private int age;
@Value("${city1[0]}")
private String city1;
//students集合中的第一个元素的score属性
@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!";
}
}
控制台输出:
Tom
10
beijing
100.0
使用@ConfigurationProperties读取
通过 @ConfigurationProperties(prefifix="对象") 可以将配置文件中的配置自动与实体进行映射,这样可以将yml 文件中配置的对象属性直接映射到Bean当中。
1
配置文件
在application.yml中添加如下配置信息:
user:
id: 10086
username: July
address:
- beijing
- tianjin
- shanghai
- chongqing
grades:
- subject: math
score: 100
- subject: English
score: 90
实体类
在com.first下创建Grade类
public class Grade {
private String subject;
private double score;
//省略get/set/toString方法
}
读取配置文件
在controller包下创建YmlController2
import com.first.domain.Grade;
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;
import java.util.List;
@Controller
@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!";
}
//省略get/set/toString方法
}
启动项目,访问localhost:8888/yml2
控制台输出:
10086
July
[beijing, tianjin, shanghai, chongqing]
[Grade{subject='math', score=100.0}, Grade{subject='English', score=90.0}]
七.占位符的使用
YAML 文件中可以使用 ${} 占位符,它有两个作用:
使用配置文件中的值
编写配置文件
server:
port: 8888
myconfig:
myport: ${server.port}
读取配置文件
@Controller
public class YmlController3 {
@Value("${myconfig.myport}")
private int port;
@RequestMapping("/yml3")
@ResponseBody
public String yml3(){
System.out.println(port);
return "hello springboot!";
}
}
使用框架提供的方法
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端口(端口号是1024-9999范围以内的数)
server:
port: ${random.int(1024,9999)}
八.配置文件存放位置及优先级
配置文件有如下存放位置:
- 项目根目录下
- 项目根目录下的/config子目录中
- 项目的resources目录中
- 项目的resources下的/config子目录中
这些目录下都可以存放两类配置文件,分别是 application.yml 和 application.properties ,这些配置文件的优先级 从高到低依次为 :
项目根目录下(即直接右键项目新建)的 /config 子目录中
- config/application.properties (优先级第一)
- config/application.yml(优先级第二)
项目根目录下
- application.properties(优先级第三)
- application.yml(优先级第四)
项目的 resources 下的 /config 子目录中
- resources/config/application.properties(优先级第五)
- resources/config/application.yml(优先级第六)
项目的 resources 目录中(最常用)
- resources/application.properties(优先级第七)
- resources/application.yml(优先级第八)
优先级高的文件会覆盖优先级低的文件中的配置
九.bootstrap配置文件
目前用不到,做分布式的时候能用到,这里做了解即可!
SpringBoot 中有两种容器对象,分别是 bootstrap 和 application ,bootstrap是应用程序的父容器, bootstrap 加载优先于applicaton。 bootstrap 配置文件主要对 bootstrap 容器进行配置,application配置文件是对 applicaton 容器进行配置。bootstrap配置文件也同样支持 properties 和 yml 两种格式,主要用于从外部引入Spring 应用程序的配置。
bootstrap配置文件特征
- boostrap由父ApplicationContext加载,比applicaton优先加载。
- boostrap里面的属性不能被覆盖。
bootstrap与application的应用场景
- application配置文件主要用于SpringBoot项目的自动化配置。
- bootstrap配置文件有以下几个应用场景。
- 使用Spring Cloud Config配置中心时,需要在bootstrap配置文件中添加连接到配置中 心的配置属性来加载外部配置中心的配置信息。
- 一些固定的不能被覆盖的属性。
- 一些加密/解密的场景。