SpringBoot配置
1. 配置文件分类
SpringBoot是基于约定的,所以很多配置都有默认值。但是如果想使用自己的配置替换默认配置的话,就可以使用properties 和 yml/yaml:
在同一级目录下优先级为:properties > yml > yaml
application.properties:
server.port=8080
或 application.yml:
server:
port: 8080
2. yaml
YAML:YAML Ain’t Markup Language,不是标记语言,是一种能够被电脑识别的数据序列化格式。
YML文件是以数据位核心的,比传统的xml方式更加简洁。
properties:
server.port=8080
server.address=127.0.0.1
xml:
<server>
<port>8080</port>
<address>127.0.0.1</address>
</server>
yml: 简洁,以数据为核心
server:
port: 8080
address: 127.0.0.1
基本语法
- 大小写敏感
- 数据值前边必须有空格,作为分隔符,可以有多个,一般为一个
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格(各个系统Tab对应的空格数目可能不同,导致层次混乱)。在Idea中可以使用
- 缩进的空格数目不重要,只要使用相同层级的元素左侧对齐即可
- # 表示注释,从这个字符一直到行尾,都会被忽略
数据格式
- 对象(map):键值对的集合
person:
name: zhangsan
age: 20
# 行内写法:
person: {name: zhangsan,age: 20}
- 数组:一组按次序排列的值,使用“-”表示数组每个值
address:
- beijing
- shanghaai
# 行内写法:
address: [beijing,shanghai]
- 纯量:单个的、不可再分的值
msg1: 'hello \n world' # 单引号不会识别转义字符,会原样输出
msg2: "hello \n word" # 双引号会识别转义字符,换行输出
参数引用
- ${key}
3. 读取配置文件内容
1)@Value:属性值很多时,挨个获取比较麻烦
@Value("${name}")
private String name;
@Value("${person.name}")
private String name2;
@Value("${address[0]}")
private String address1;
2)Environment:注入一个对象,使用getProperty获取属性值
@Autowired
private Environment env;
System.out.println(env.getProperty("person.name");
3)@ConfigurationProperties:对象与配置属性的绑定
@Component
@ConfigurationProperties(prefix = "person") # 配置文件里的前缀,和类里的属性需要一一对应
public class Person{
private String name;
private int age;
private String[] address;
}
4. profile
动态切换配置,同一套程序会被安装到不同环境,如:开发、测试、生产等。
1)profile配置方式
- 多profile文件方式:提供多个配置文件,每个代表一种环境。
- application.properties
- spring.profiles.active=dev
- application-dev.properties # 开发环境
- application-test.properties # 测试环境
- application.properties
- yml多文档方式 :在yml中使用 “- - -” 分隔不同配置
- application.yml
--- server: port: 8081 spring: profiles: dev --- server: port: 8082 spring: profiles: test --- spring: profiles: active: dev
2)profile激活方式
- 配置文件:在配置文件中配置:spring.profiles.active=dev
- 虚拟机参数:在VM options指定:-Dspring.profiles.active=dev
- 命令行参数:java -jar xxx.jar --spring.profiles.active=dev
5. 内部配置加载顺序
SpringBoot程序启动时,会从以下位置加载配置文件:
1)file:./config/ 当前项目下的/config目录下
2)file:./ 当前项目的根目录
3)classpath:/config/ classpath的/config目录
4)classpath:/ classpath的根目录
加载顺序为上文的排列顺序,高优先级配置的属性会生效。
6. 外部配置加载顺序
一共有17个地方可以进行配置,常用的:
外部配置 与 内部配置 联合使用。