目录
- 背景
- 第一部分 开发环境准备
- 第二部分 使用Maven构建项目
- 第三部分 项目目录结构
- 第四部分 编写HelloWorld项目
- 参考文献及资料
背景
第一部分 配置文件
在使用Spring Initializer
快速创建SpringBoot项目时,会在resources目录下给我们一个默认的空的全局配置文件 application.properties
。配置文件的作用也正是用来修改SpringBoot自动配置的默认值。
配置文件名是固定的,SpringBoot
使用一个全局配置文件application.properties
或者application.yml
(或者yaml
)。这两个文件本质是一样的,区别只是其中的语法略微不同。
application.yml 配置文件使用YMAL语言,YMAL不是如XML般的标记语言,以数据为中心,更适合作为配置文件。
YAML:
1 | server: |
XML:
1 | <server> |
第二部分 YAML语法
2.1 基本语法
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- 大小写敏感
k:(空格)v——表示一对键值对(空格必须有)。以空格的缩进来控制层级关系,只要是左对齐的一列数据,都是同一个层级的。
1 | server: |
格式校验可以使用在线工具:https://www.bejson.com/validators/yaml_editor/
2.2 写法
(1)字面量
字面量:普通的值(数字,字符串,布尔,日期 )
k: v
——字面直接书写
- 字符串默认不用加上单引号或者双引号
1 | name: zhangsan |
""
:双引号,不会转义字符串里面的特殊字符,特殊字符会作为本身想表示的意思
1 | name: "zhangsan \n lisi" |
输出:
1 | zhangsan |
''
:单引号,会转义特殊字符,特殊字符最终只是一个普通的字符串数据
1 | name: 'zhangsan \n lisi' |
输出:
1 | zhangsan \n lisi |
(2)对象、Map(属性和值)(键值对)
k: v
——在下一行来写对象的属性和值的关系(注意缩进)
1 | friends: |
行内写法:
1 | friends: {lastName: zhangsan,age: 18} |
(3)数组(List、Set)
用- 值
表示数组中的一个元素
1 | pets: |
行内写法
1 | pets: [cat,dog,pig] |
第三部分 配置文件的注入
3.1 配置文件书写
(1)yaml配置文件
配置文件application.yml
1 | person: |
(2)properties配置文件
或者application.properties
1 | person.last-name=张三 |
3.2 属性注入
(1)@ConfigurationProperties
JavaBean:
1 | /** |
导入配置文件处理器,配置文件进行绑定就会有提示:
1 | <dependency> |
编写测试方法:
1 | (SpringRunner.class) |
输出结果:
1 | Person(LastName=zhangsan, age=20, boss=false, birthday=Sat Oct 10 00:00:00 CST 2020, maps={k1=v1, k2=15}, lists=[lisi, wangwu], dog=Dog(name=狗狗, age=5)) |
(2)@Value
1 |
|
输出结果:
1 | Person(LastName=张三, age=22, boss=true, birthday=Fri Oct 10 00:00:00 CST 1997, maps=null, lists=null, dog=null) |
@Value获取值和@ConfigurationProperties获取值比较:
比较 | @ConfigurationProperties | @Value |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
不论配置文件yml还是properties他们都能获取到值。
在某个业务逻辑中需要获取配置文件中的某项值——使用@Value;专门编写了一个JavaBean来和配置文件进行映射——使用@ConfigurationProperties。
第四部分 配置文件占位符
第六部分 多环境配置Profile
以上都不是重点,这才是重点,这才是重点,这才是重点,重要的事情说3遍。我们在开发Spring Boot应用时,通常同一套程序会被应用和安装到几个不同的环境,比如:开发、测试、生产等。其中每个环境的数据库地址、服务器端口等等配置都会不同,如果在为不同环境打包时都要频繁修改配置文件的话,那必将是个非常繁琐且容易发生错误的事。
对于多环境的配置,各种项目构建工具或是框架的基本思路是一致的,通过配置多份不同环境的配置文件,再通过打包命令指定需要打包的内容之后进行区分打包,Spring Boot也不例外,或者说更加简单。
在Spring Boot中多环境配置文件名需要满足 application-{profile}.properties
的格式,其中 {profile}
对应你的环境标识,比如:
application-dev.properties:开发环境
application-test.properties:测试环境
application-prod.properties:生产环境
至于哪个具体的配置文件会被加载,需要在 application.properties
文件中通过 spring.profiles.active
属性来设置,其值对应 {profile}
值。
如: spring.profiles.active=test
就会加载 application-test.properties
配置文件内容
下面,以不同环境配置不同的服务端口为例,进行样例实验。
第七部分 配置文件加载位置
第八部分 外部配置加载顺序
第九部分 自动配置原理
参考文献及资料
1、Spring官网,链接:https://juejin.cn/post/6844904186539147271