- SpringBoot支持两种类型配置文件:.yml 和 .properties 为后缀的配置文件。
- Spring默认读取全局的配置文件为:application.properties 和 application.yml
YML语法:
1、基本语法:key: value
key:(空格)value 表示一对键值对,且key和value之间必须有空格,且key、value都是大小写敏感的。
YML语法是以缩进来控制层级关系,只要是左对齐的一列数据,都是同一个层级。
server:
port: 8080
path: /hello/springboot
2、值得写法:
1、普通值——数字、字符串、布尔
key: value 直接将用目标值替换value即可。
- 字符串默认不用加单引号或双引号;
- 双引号,会转译字符串里面的特殊字符,特殊字符会作为转译后的意思输出:“abc \n 123”, 输出: abc 换行 123
- 单引号,将字符串原样输出,不转译字符串内的特殊字符: “abc \n 123”,输出:abc \n 123
2、对象、Map
key: value key标识对象或集合名 ,value用是一个k: v对
写法1:
map:
key1: value1
key2: value2
写法2:
map: {key1: value1,key2: value2}
3、数组——list、set
写法1:
listName:
- value1
- value2
- value3
写法2:
listName: [value1,value2,value3]
.properties配置文件:
.properties配置文件格式:key=value
.properties文件与.yml文件格式上的区别是:
- .properties文件属性赋值用等到链接,key=value
- .properties文件的层级关系用parent.child.grandson表示,如school.class.sudent.name=张三
配置文件占位符:${}
在处理配置文件时,可以使用占位符${},动态给属性赋值:
1、获取随机数:${ramdom.value}、${ramdom.int}、${ramdom.long}、${ramdom.int(10)}、${ramdom.int[100,1000]}
person.name=张三${random.uuid}
2、获取其他属性的值,如果没有可以指定默认值
person.name=张三
person.name.china=${person.name}
person.name.english=${person.english-name:zhangsan} # 指定默认值
多配置文件切换和文档块:
SpringBoot默认加载的配置文件名是:application.properties/yml,如果要添加多个配置文件可以使用文件名为application-(profile).properties/yml的配置文件。如果要让SpringBoot能加载这些配置文件,需要激活自定义配置文件。激活方式:
- 在默认配置文件中添加配置: spring.profiles.active=dev (dev是applicaition- 后面的自定义文件名部分)
- 命令行方式: java -jar 项目名 --spring.profiles.active=dev
- 虚拟机参数指定: -Dspring.profile.active=dev
此外yml文件还支持文档块的方式:application.yml可以通知配置多个环境下的配置信息
SpringBoot会先读取第一个文档块,第一个文档块中的spring.profiles.active属性用于指定激活下面那个文档块,而下面两个文档块中的spring.profiles属性,用于标识当前文档块,以便于在第一个文档块中激活。
SpringBoot配置文件加载位置和外部配置加载顺序:
SpringBoor启动时会扫描一下位置的application.properties/yml文件,作为配置文件:
- -file:./config/
- -file:./
- -classpath:/config/
- -classpath:/
优先级由高到低,高优先级的配置会覆盖低优先级的配置;配置文件之间的关系是互补配置,高优先级文件中已经加载的属性不会再加载,高优先级中没有配置的属性而低优先级配置的属性,会继续加载。也可以使用命令行参数,指定spring.cofig.location属性来指定要加载的配置文件,指定的配置文件(优先级最高)和默认配置文件会共同器作用:
java -jar 项目名 --spring.config.location=E:/application.properties
SpringBoot会加载很多地方的配置:命令行参数、java系统属性、系统环境变量等等,来看一下加载顺序,优先级由高到底:
- 命令行参数,多个配置用空格分隔:java -jar 项目名 --server.port=8080 --server.path=/path
- 来自java:comp/env 的 JNDI 属性
- Java系统属性
- 操作系统环境变量
- RandomValuePropertySource配置的random.*属性值
- jar包外application-{profile}.properties/yml文件,带spring.profile属性
- jar包内的application-{profile}.priperties/ym文件,带spring.profile属性
- jar包外的application.properties/yml 文件,没有spring.profile属性
- jar包内的application.properties/yml文件,没有spring.profile属性
- @configuration注解类上的@propertySource //指定加载配置文件
- 通过SpringApplication.setDefaultProperties指定的默认属性