配置文件介绍
SpringBoot配置文件支持properties文件和YAML文件
docs.spring.io/spring-boot… 可以查找配置文件如何覆盖SpringBoot项目的默认配置。
YAML文件的扩展名为 .yml 或 .yaml ,它的基本要求如下:
- 大小写敏感
- 使用缩进代表层级关系
- 相同的部分只出现一次
自定义配置简单数据类型
自定义配置对象数据
对象:
属性名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: baizhan
age: 18
score: 100
- name: shangxuetang
age: 28
score: 88
- name: chengxuyuan
age: 38
score: 90
注意:值与之前的 - 之间存在一个空格
读取配置文件的数据
使用@Value读取
可以通过@Value注解将配置文件中的值映射到一个Spring管理的Bean的字段上
@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!";
}
}
@Value只能映射简单数据类型,不能将yaml文件中的对象、集合映射到属性中。
使用@ConfigurationProperties读取
通过 @ConfigurationProperties(prefifix="对象") 可以将配置文件中的配置自动与实体进行映射,这样可以将yml文件中配置的对象属性直接映射到Bean当中。
配置文件
user:
id: 10001
username: shangxuetang
address:
- beijing
- tianjin
- shanghai
- chongqing
grades:
- subject: math
score: 100
- subject: english
score: 90
实体类
public class Grade {
private String subject;
private double score;
// 省略getter/setter/tostring
}
读取配置文件
@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!";
}
}
占位符的使用
YAML文件中可以使用 ${} 占位符,它有两个作用
server:
port: 8888
myconfig:
myport: ${server.port}
@Value("${myconfig.myport}")
private int port;
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范围内的一个值
配置文件位置以及优先级
配置文件有如下存放位置:
- 项目根目录下
- 项目根目录下的/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 优先级高的文件会覆盖优先级低的文件中的配置