springboot-配置文件
springboot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(yaml)进行配置
在同一目录下配置文件优先级:properties>yml>yaml
yaml
yaml文件是以数据为核心的,比传统的xml方式更加简洁
yaml文件的扩展名可以使用yaml或yml
语法
- 大小写敏感
- 数据值前边必须有空格,作为分隔符
- 使用缩进表示层级关系
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
#
表示注释,从这个字符直到行尾,都会被解析器忽略
数据格式
-
对象:键值对集合
person: name: zhangsan age: 20 #行内写法 person: {name: zhangsan,age: 20}
-
数组:一组按次序排列的值
address: - beijing #使用`-`表示数组每个元素 - shanghai #行内写法 address: [beijing,shanghai]
-
纯量:单个的、不可再分的值
msg1: 'hello \n yml' #单引号忽略转义字符 msg2: "hello \n yml" #双引号识别转义字符
参数引用
可以使用${key}
的方式复用其他key的值
name: lisi
name2: ${name}
注意:行内写法无法使用参数引用
读取配置
-
@Value
- 获取纯量:
@Value("${key}")
- 获取对象:
@Value("${object.key}")
- 获取数组:
@Value("${keys[index]}")
- 获取纯量:
-
Environment
- 获取纯量:
environment.getProperty("key")
- 获取对象:
environment.getProperty("object.key")
- 获取数组:
environment.getProperty("keys[index]")
- 获取纯量:
-
@ConfigurationProperties
-
配置文件
person: name: zhangsan age : 20 address: - beijing - shanghai
-
实体类
@Data @Component @ConfigurationProperties(prefix = "person") public class Person { private String name; private int age; private String[] address; }
可以添加依赖实现提示功能
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
-
profile
profile功能就是进行动态配置切换的
配置
-
多文件方式:创建多个环境的配置文件,文件名
application-自定义环境名.yml
-
单文件多文档方式:在
application.yml
中使用---
进行分割--- # 文档1 spring: profiles: 环境名1 # ... --- # 文档2 spring: profiles: 环境名2 # ... ---
激活
-
配置文件
spring: profiles: active: 环境名
-
虚拟机参数:启动时添加参数
-Dspring.profiles.active=环境名
-
命令行参数:启动时添加参数
--spring.profiles.active=环境名
配置文件位置
springboot启动时,会从以下位置加载配置文件,加载优先级由高到低为:
- 当前项目的/config目录下
- 当前项目的根目录
- classpath的/config目录
- classpath的根目录
配置冲突时,优先级高的生效
注意:1和2方式是不会打入jar包的,需要启动时使用
--spring.config.location=配置文件路径
或将配置文件负责到target目录下,并在此目录下启动项目