SpringBoot-配置文件
配置文件
SpringBoot使用一个全局的配置文件,配置文件名是固定的:
- application.properties
- application.yml
配置文件的作用:修改SpringBoot自动配置的默认值
yml是YAML(YAML Ain't Markup Language)语言的文件,以数据为中心,比json、xml等更适合作配置文件
xml
1 | <server> |
yml:
1 | server: |
YAML语法
基本语法
k:(空格)v:表示一对键值对(空格必须有)
以空格的缩进来控制层级关系;只有是左对齐的一列数据,都是同一层级的
属性和值也是大小写敏感的
值的写法
字面量:普通的值(数字、字符串、布尔)
k: v:字面直接写(字符串默认不用加上引号;双引号不会转义字符串中的特殊字符;单引号会转义特殊字符)
对象、Map(属性和值)(键值对)
- k: v:对象还是k: v的方式,在下一行来写对象的属性和值的关系;注意缩进
1
2
3friends:
name:zhangsan
age:20- 行内写法:
1
friends: {name: zhangsan,age: 20}
数组(List、Set)
用- 值表示数组中的一个元素
1
2
3pets:
- cat
- dog行内写法
1
pets: [cat,dog]
配置文件值注入
配置文件:
1
2
3
4
5
6
7
8
9
10
11
12person:
lastName: zhangsan
age: 18
boss: false
birth: 2017/12/12
maps: {k1: v1,k2: 12}
lists:
- lisi
- zhaoliu
dog:
name: 小狗
age: 2或
1
2
3
4
5
6
7
8
9
10
11# idea properties配置文件默认是utf-8编码
# 会有中文乱码,需要在setting->File Encodings将Transparent native-to-ascii勾上
张三 =
18 =
2020/2/7 =
false =
v1 =
22 =
a,b,c =
dog =
5 =JavaBean:
1 | /** |
- 可以导入配置文件处理器
1 | <!-- 导入配置文件处理器,配置文件进行绑定就会有提示 --> |
@Value获取值和@ConfigurationProperties获取值比较(2.1.6版本)
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
配置文件 yml还是properties,才能获取到值
如果只是在某个业务逻辑中需要获取一下配置文件中的某项值,就用@Value
如果专门编写一个javaBean来和配置文件 进行映射就使用@ConfigurationProperties
配置文件注入值数据校验
1 |
|
@PropertySource&@ImportResource
- @PropertySource:读取指定配置文件
1
@ImportResource:导入Spring的配置文件 ,让配置文件中的内容生效
Spring Boot里面没有Spring配置文件 ,编写的配置文件也不能自动识别
想让Spring配置文件生效,就必须用@ImportResource加载
1
SpringBoot推荐的给容器中添加组件的方式,使用全注解的方式
- 配置类==Spring配置文件
- 使用@Bean给容器中添加组件
1
2
3
4
5
6
7
8
9
10
11
12
13/**
* @Configuration:指明当前类是一个配置类,替代Spring配置文件
*/
public class MyAppConfig {
/**
* 将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名
*/
public HelloService helloService(){
return new HelloService();
}
}配置文件站位符
1 | # 随机数 |
1 | # 站位符获取之前配置的值,如果没有可以使用:指定默认值 |
Profile
多Profile文件
我们在主配置文件编写的时候,文件名可以是application-{profile}.properties/yml
默认使用application.properties配置文件
yml支持多文档块方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15server:
port: 8081
spring:
profiles:
active: dev
server:
port: 8082
spring:
profiles: dev
server:
port: 8083
spring:
profiles: prod激活指定profile
在配置文件中指定:spring.profiles.active=dev
或使用命令行: --spring.profiles.active=dev,idea中配置program arguments
或虚拟机参数:-D spring.profiles.active=dev,idea中配置VM options
配置文件加载位置
SpringBoot启动会扫描以下位置的application.properties或者application.yml文件作为SpringBoot的默认配置文件
- file:./config/
- file:./
- classpath:/config/
- classpath:/
以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置内容,互补配置
1
/boot02 # 配置项目的访问路径 =
可以通过配置spring.config.location来改变默认配置文件位置,项目打包后,可以使用命令行参数,启动项目时指定配置文件的新位置,指定配置文件和默认加载的这些配置文件共同起作用形成互补配置
外部配置加载顺序
SpringBoot也可以从以下位置加载配置:优先级从高到低,高优先级覆盖低优先级的配置,所有配置会形成互补配置
命令行参数:java -jar xxx.jar --server.port=8088 --server.context-path=/abc,多个配置间用空格分开
来自java:comp/env的JNDI属性
Java系统属性(System.getProperties())
操作系统环境变量
RandomValuePropertySource配置的random.*属性值
优先加载带profile的,从外部向内部
jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
jar包外部的application.properties或application.yml(不带spring.profile)配置文件
jar包内部的application.properties或application.yml(不带spring.profile)配置文件
@Configuration注解类上的@PropertySource
通过SpringApplication.setDefaultProperties指定的默认属性
自动配置原理