配置文件
全局配置文件 SpringBoot使用一个全局的配置文件,配置文件名固定:application.properties/application.yml
配置文件目录:在src/main/resource目录或者类路径/config下
配置文件作用:修改SpringBoot自动配置的默认值,比如tomcat监听端口,SpringBoot默认配置为8080,可以通过application.properties设置server.port=8081,修改监听端口。
YML基本语法
YML概念:YAML Ain’t Markup Language,YML不是一门标记语言,该语言以数据为中心
YML和XML对比
YML:
server:
port: 8081
XML
<server>
<port>8081</port>
</server>
YML语法基本规则
k:(空格)v 表示一对键值对,其中必须要有空格,yml通过空格的缩进来控制层级关系;只要左对齐的一列数据,都是同一层级的;并且属性和值对大小写敏感。
YML各类值的写法
-
字面量
k: v 字面量直接写,字符串默认是不需要加上单引号或者双引号
单引号 不会对特殊字符进行转义,比如\n,输出字符串,也是\n两个字符;不加引号也是该效果
双引号 会对特殊字符进行转义,比如含有\n,如果打印出来,会是换行;可以理解成字符串 -
对象、Map(键值对)
- 多行写法
需要注意每行开始的空格 - 单行写法
使用大括号括起来,键值对之前使用逗号进行分隔,注意key和value之间的空格
- 多行写法
maps: {k1: v1, k2: 12}
person:
age: 18
boss: false
birth: 2000/1/1
- 数组(List、Set)
- 多行写法
每行开始时候使用短横线 - 单行写法
使用中括号括起来,键值对之前使用逗号进行分隔
- 多行写法
pets: [cat, dog, sheet]
lists:
- lisi
- zhaoliu
- wangwu
配置文件的注入
这里只是讨论使用不同注解注入的方式,具体配置文件yml和properties都可以使用
- 方式一:@ConfigurationProperties 用来批量导入配置类;需要注意使用 @Component 注解(或者配合@Bean一起使用),让SpringBoot进行管理;@PropertySource注解,配合使用,可以读取指定的配置文件位置;@PropertySource(value = {“classpath:person.properties”}) 配合 @Validated 注解,支持JSR303配置校验
person:
age: 18
boss: false
birth: 2000/1/1
maps: {k1: v1, k2: 12}
lists:
- lisi
- zhaoliu
- wangwu
dog:
name: haha
age: 2
last-name:xiaoming
/**
* 将配置文件中配置的每一个属性的值,映射到这个组件中
* @ConfigurationProperties 告诉Springboot将本类中所有的属性和配置文件中的相关配置进行绑定
* prefix = "person" 配置文件中那个下面的属性进行一一对应
*
* 只有这个组件是容器中的组件,才能使用容器提供的ConfigurationProperties功能
*
* @date 2019/10/23
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
- 方式二:@Value
value=“字面量/${key}从环境变量、配置文件中获取的值/#{SpEL}表达式”
@Value("${person.lastName}")
private String lastName;
@Value("#{11*2}")
private Integer age;
@Value("true")
private Boolean boss;
Profile多环境支持
场景:测试环境和生产环境需要不同的配置参数,如何在同一套代码中实现
-
方式一:使用多个properties文件
在主配置文件编写的时候,文件名可以是 application-{profile}.properties(例如:application-dev.properties)
默认使用application.properties文件 -
方式二:在同一个yml文件中使用多文档的方式
yml使用“- - -”(三个短横)来在一个yml文件中分隔多个文档
server:
port: 8081
spring:
profiles:
active: prod
---
server:
port: 8085
spring:
profiles: dev
---
server:
port: 8086
spring:
profiles: prod
激活指定的profile文件
-
在配置文件中指定
在properties中,在application.properties中使用 spring.profiles.active=dev 指定
在yml文件中,在各个文档块里面配置spring.profiles对应的内容,并且spring.profiles.active 指定 -
命令行方式
在启动jar包的时候,传入命令行参数
java -jar *****.jar --spring.profiles.active=dev -
虚拟机参数
-Dspring.profiles.active=dev
配置文件的加载位置
spring boot启动会扫描以下位置的application.properties或者application.yml文件作为SpringBoot的默认配置文件
- file:./config/
- file: ./
- -classpath: /config
- -classpath: / 如在IDEA工程中的resources目录下建立的配置文件
上面是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级的配置内容;并且形成内容互补