概述
SpringBoot项目中,大部分配置都有默认值,但如果想替换默认配置的话, 就可以使用application.properties或者application.yml进行配置
查找配置文件如何覆盖SpringBoot项目的默认配置
springboot配置文件的优先级
配置文件存放位置:
项目根目录下
项目根目录下的/config子目录中
项目的resources目录中
项目的resources下的/config子目录中
优先级从高到低【优先级高的文件会覆盖优先级低的文件中的配置】
项目根目录下的/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
properties文件
简介
后缀properties的文件是一种属性文件。这种文件以key=value格式存储内容
注意
如果properties文件中含有中文那么需要对idea进行设置【file-settings-Editor-File Encodings】
Properties工具类
Properties工具类,位于java.util包中,该工具类继承自Hashtable<Object,Object>。 通过Properties工具类可以读取.properties类型的配置文件
properties文件写法
#这是一条注释
name=jkw
age=20
读取properties文件的数据
public class PropertiesTest {
public static void main(String[] args) throws IOException {
//实例化Properties对象
Properties prop = new Properties();
//获取读取properties文件的输入流对象
InputStream is = PropertiesTest.class.getClassLoader().getResourceAsStream("application.properties");
//通过给定的输入流对象读取properties文件并解析。
prop.load(is);
System.out.println(prop.getProperty("name"));
}
}
yaml文件
简介
YAML文件的扩展名为.yml或.yaml
基本要求
大小写敏感
使用缩进代表层级关系
相同的部分只出现一次
yml语法中,相同缩进代表同一个级别,只要每个属性前的空格数一样即可
注意
像name: jkw,冒号后面要有一个空格
yml编写数据
#简单数据
name: jkw
#对象数据
# 学生1
student1:
sex: female
age: 10
address: beijing
# 学生2
student2: { sex: female,age: 10,address: beijing }
# 集合数据
# 城市
city1:
- beijing
- tianjin
- shanghai
- chongqing
city2: [ beijing,tianjin,shanghai,chongqing ]
@Value获取数据
package jkw.test;
import org.springframework.beans.factory.annotation.Value;
public class YmlTest {
@Value("${name}")
private static String name;
@Value("${student1.age}")
private static String studentAge;
@Value("${city1[0]}")
private static String city10;
public static void main(String[] args) {
System.out.println(name);
System.out.println(studentAge);
System.out.println(city10);
}
}
@ConfigurationProperties读取配置文件数据
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!";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public List<String> getAddress() {
return address;
}
public void setAddress(List<String> address) {
this.address = address;
}
public List<Grade> getGrades() {
return grades;
}
public void setGrades(List<Grade> grades) {
this.grades = grades;
}
}
yaml-占位符
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范围内的一个值
# 随机生成tomcat端口
server:
port: ${random.int(1024,9999)}
bootstrap
SpringBoot中有两种容器对象,分别是bootstrap和application,bootstrap是应用程序的父容器,bootstrap加载优先于applicaton。
bootstrap配置文件主要对bootstrap容器进行配置,application配置文件是对applicaton容器进行配置。
bootstrap配置文件也同样支持properties和yml两种格式,主要用于从外部引入Spring应用程序的配置。
boostrap由父ApplicationContext加载,比applicaton优先加载。
boostrap里面的属性不能被覆盖。