1、配置文件分类
Spring Boot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用
application.properties?或者application.yml(application.yaml)进行配置。
properties:
server.port=8080
yml:
server: port:8080SpringBoot提供了种配置文件类型:properteis和yml/yaml
- 默认配置文件名称:application
- 在同一级目录下优先级为:
properties>yml>yaml
2、YAML
YAML全称是YAML Ain’t Markup Language。YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如:C/C++,Ruby,Python,,Java,Perl,C#,PHP等。YML文件是以数据为核心的,比传统的xml方式更加简洁。
YAML文件的扩展名可以使用,yml或者.yaml。
yaml文件比较简洁
YAML:基本语法
- 大小写敏感
- 数据值前边必须有空格,作为分隔符
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格(各个系统Tab对应的空格数目可能不同,导致层次混乱)。
- 缩进的空格数目不重要,只要相同层级的元素左侧收对齐即可
表示注释,从这个字符一直到行尾,都会被解析器忽略。
```yaml server: port: 8080 # 注意空格 address: 127.0.0.1
name: abc
<a name="IaAP2"></a>
## YAML:数据格式
- 对象(map): 键值对的集合
```yaml
person:
name: zhangsan
age: 20
#行内写法
person2: {name: zhangssan, age:20}
- 数组: 一组按次序排列的值
```yaml
address:
- beijing
- hangzhou
行内写法
address2: [beijing, shanghai]
- 纯量: 单个的、不可再分的值
```yaml
msg1: 'heelo \n world' # 单引号忽略转义字符
msg1: "heelo \n world" # 双引号识别转义字符
3、读取配置内容
读取配置的内容有三种方式, 1、@Value 2、 Environment 3、@ConfigurationProperties
1、@Value
配置文件的名称要和表达式中的值一样, 表达式中有层级关系用.表示下一层

2、Environment
注入一个org.springframework.core.env.Environment的对象, 然后通过env对象来获取对象的属性
输入的参数方式和 value的一样

3、@ConfigurationProperties
创建一个配置类, 将配置文件中的值全部注入到配置类中,在配置类中加上 Component,标识这是一个spring的beanConfigurationProperties, 标识这是一个配置类

上面报红的是没有开启处理注解的依赖, 点击文档添加依赖的配置后,在写配置文件的时候会有对应的提示
但是使用时需要注意, ConfigurationProperties需要指定前缀,不然无法读取到person类, 而是将整个application.yml文件当成 Person类,按上面的运行只能读取到name是abc。
使用prefix指定
4、profIle
我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。
profile功能就是来进行动态配置切换
4.1 profilei配置方式
配置不同的环境的方式有2种,如下
- 方式1,多profile文件方式
编写多个配置文件, 启动时用spring.profiles.active来激活对应的配置文件
- 方式2,yml多文档方式
在一个yaml中,用---来分成不同的段, 每个段使用spring.profiles=xx来进行区分,最后用spring.profiles.active来激活对应的配置
4.2 profile激活方式
profile激活的方式有3种,第一种方式是静态的已经在代码中写死, 第2 3种在程序启动时给指定具体的参数
- 方式1,配置文件
配置文件的方式, 就是上面那种在配置文件中指定
- 方式2, 虚拟机参数
在VM options指定:-Dspring-profiles.active:=dev
- 方式3, 命令行参数
java-jar xxx.jar --spring.profiles.active=dev
5、配置文件的加载顺序
5.1 内部配置加载顺序
Springbooti程序启动时,会从以下位置加载配置文件:
1.file:./config/: 当前项目下的/config目录下
2.file:./: 当前项目的根目录
3.classpath:/config/: classpath的/config目录
4.classpath:/: classpath的根目录 (上面文档中的方式)
注意: 1、2是不会打入项目的jar包的, 而3、4是会最终编入jar中。
加载顺序为上文的排列顺序,高优先级配置的属性会生效
5.2 外部配置的加载顺序
外部配置优先级高于内部的配置,内部配置是静态的可以看作是默认值,而外部配置是可以动态修改,这样极大提高灵活性。
https://www.springcloud.cc/spring-boot.html#boot-features-external-config
常用的有:
a. 命令行参数
b. 12.特定配置文件的应用程序属性在打包
