1、配置文件分类

Spring Boot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用
application.properties?或者application.yml(application.yaml)进行配置。

  • properties:

    1. server.port=8080
  • yml:

    server:
    port:8080
    
  • SpringBoot提供了种配置文件类型: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文件比较简洁
image.png

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

配置文件的名称要和表达式中的值一样, 表达式中有层级关系用.表示下一层
image.png
image.png

2、Environment

注入一个org.springframework.core.env.Environment的对象, 然后通过env对象来获取对象的属性

输入的参数方式和 value的一样

image.png

3、@ConfigurationProperties

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

image.png

上面报红的是没有开启处理注解的依赖, 点击文档添加依赖的配置后,在写配置文件的时候会有对应的提示

但是使用时需要注意, ConfigurationProperties需要指定前缀,不然无法读取到person类, 而是将整个application.yml文件当成 Person类,按上面的运行只能读取到name是abc。
image.png

使用prefix指定
image.png


4、profIle

我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。
profile功能就是来进行动态配置切换

4.1 profilei配置方式

配置不同的环境的方式有2种,如下

  • 方式1,多profile文件方式

编写多个配置文件, 启动时用spring.profiles.active来激活对应的配置文件
image.png

  • 方式2,yml多文档方式

在一个yaml中,用---来分成不同的段, 每个段使用spring.profiles=xx来进行区分,最后用spring.profiles.active来激活对应的配置
image.png

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的根目录 (上面文档中的方式)
image.png

注意: 1、2是不会打入项目的jar包的, 而3、4是会最终编入jar中。

加载顺序为上文的排列顺序,高优先级配置的属性会生效

5.2 外部配置的加载顺序

外部配置优先级高于内部的配置,内部配置是静态的可以看作是默认值,而外部配置是可以动态修改,这样极大提高灵活性。

https://www.springcloud.cc/spring-boot.html#boot-features-external-config
image.png
常用的有:
a. 命令行参数
b. 12.特定配置文件的应用程序属性在打包
image.png