springboot 的配置文件有多种方式,目前使用的是properties和yml两种格式的配置文件
如果properties和yml同名称文件时读取的顺序为properties–> yml ,properties和yml对应的同一个配置内容的时候会覆盖掉yml的内容,使用properties的配置内容
properties
server.port=8081
yml
数据格式对数据的缩进要求比较高,键值对的模式进行存储,以数据为中心的一个简洁配置文件
server:
port: 8082
address: 127.0.0.1
names: zhangsan
#缩进写法,参数引用
person:
name: ${names} #zhansan
age: 20
#行内写法
persons: {name: lisi,age: 20}
#数组
address:
- beijing
- shanghai
#行内写法
addresss: [beijing,shanghai]
#纯量 单个的,不可再分的值
#单引号忽略转义字符
msg1: 'hello \n world'
#双引号识别转义字符
msg2: "hello \n world"
yml读取配置内容
1. @Value读取
@Value("${names}")
private String name;
2.Environment读取 使用自动注入
@Autowired
private Environment environment;
environment.getProperty("person.age")
3.@Component
@ConfigurationProperties注解注入
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
@Autowired
private Person person;
System.out.println(person.toString());
profile配置
-
profile是用来完成不同环境下,配置动态切换的功能,
-
profile配置方式
- 多profile文件方式,提供多个配置文件,每个代表一种环境。
- application-dev.properties/yml 开发环境
- application-test.properties/yml 测试环境
- application-pro.properties/yml 生产环境
- yml多文档方式
- 在yml中使用 不需要—分割不同配置
- 多profile文件方式,提供多个配置文件,每个代表一种环境。
-
profile激活方式
- 配置文件:再配置文件中配置:spring.profiles.active=dev
- 虚拟机参数:在vm options 指定,-Dspring.profiles.active=dev
- 命令行参数: java -jar xxx.jar --spring.profiles.active=dev
内部配置文件加载顺序
springboot程序启动时,会从一下位置加载配置文件
1.file:…/config/: 会从当前项目下的/config目录下
2.file:…/ : 当前项目的根目录
3.classpath:/config/: classpath的/config目录
4.classpath:/ : classpath的根目录
加载顺序为上面的排序顺序,高优先级的属性会生效。
下图为第三级和第四级的
外部配置文件加载顺序
- 使用命令行的方式进行修改配置内容
命令行参数: java -jar xxx.jar --server.port:=81 - 使用外部文件的方式进行修改配置内容
不与生成的jar包放在同一个级别的文件加载方式
命令行参数: java -jar xxx.jar --spring.config.location=“绝对路径”
放在与jar包同一个级别的加载不需要添加任何的配置文件就可以读取外部配置文件,外部配置的读取级别为带config目录的优先级更加高。