1.基本语法
- 大小写敏感
- 数据值前边必须有空格,作为分隔符
- 使用缩进标识层级关系
- 缩进式不允许使用Tab键,只允许使用空格(各个系统Tab对应的空格数目可能不同,导致层次混乱***特别说明:idea对yaml有良好的支持,使用tab键缩进也能是排版整洁)
- 缩进的空格数目不重要,只要相同层级的原色左对齐即可
- “#” 表示注释,从这个字符一直到行尾,都会被解析器忽略
- 配置文件优先级: .properties>.yml>yaml
server:
port: 8080
address: 127.0.0.1
name: abc
2.数据格式
- 对象(map): 键值对的集合
// 一般写法
person:
name: zhangsan
// 行内写法
person: {name: zhangsan}
- 数组: 子组按次序排列的值
// 一般写法
address:
- beijing
- shanghai
// 行内写法
address: [beijing,shanghai]
- 纯量: 带个的,不可再分的值
msg1: 'hello \n world' // 单引号忽略转义字符,输出为一行
msg2: "hello \n world" // 双引号识别转义字符,输出为两行
- 参数引用
name: abc
person:
name: ${name}
3.读取配置内容
三种方式
- 注解: @Value 缺点: 属性太多的话会写一堆代码
例如方法内有个属性:
@Value("${name}")
private String name
// 对象
@Value("${person.name}")
private String name2
@Value("${address[1]}")
private String name3
例如方法内有个属性:
@Value("${name}")
private String name
// 对象
@Value("${person.name}")
private String name2
@Value("${address[1]}")
private String name3
- 环境对象: Environment
@Autowired
private Environment env
System.out.print(env.getProperty("person.name"))
- 注解: @ConfigurationProperties
@Component
@ConfigurationProperties(prefix = "persion") // 表示yaml中的person配置和类中的属性一一对应
public class Person {
private String name;
public void setName ( String name ) {
this.name = name
}
public String getName () {
return name
}
}
@Component
@ConfigurationProperties(prefix = "persion") // 表示yaml中的person配置和类中的属性一一对应
public class Person {
private String name;
public void setName ( String name ) {
this.name = name
}
public String getName () {
return name
}
}
Profile
- profile是用来完成不同环境下,配置动态切换功能的
- profile配置方式
1. 多profile 文件方式: 提供多个配置文件, 每个代表一种环境,例如:
application-dev.yml 开发环境
application-test.yml 测试环境
application-pro.yml 生产环境
** 在主文件application.yml通过设置 spring.profiles.active = dev激活
2. yml多文档方式,写在一个文件即可,使用---分割不同配置
---
server:
port: 8081
spring:
porfiles: dev
---
server:
port: 8082
spring:
porfiles: test
---
server:
port: 8083
spring:
porfiles: pro
---
spring:
profiles:
active: dev
1. 多profile 文件方式: 提供多个配置文件, 每个代表一种环境,例如:
application-dev.yml 开发环境
application-test.yml 测试环境
application-pro.yml 生产环境
** 在主文件application.yml通过设置 spring.profiles.active = dev激活
2. yml多文档方式,写在一个文件即可,使用---分割不同配置
---
server:
port: 8081
spring:
porfiles: dev
---
server:
port: 8082
spring:
porfiles: test
---
server:
port: 8083
spring:
porfiles: pro
---
spring:
profiles:
active: dev
- profile激活方式
1. 配置文件: 在配置文件中配置: spring.profiles.active = dev
2. 虚拟机参数: 在VM options指定: -Dspring.profiles.active = dev
3. 命令行参数: java -jar xxx.jar --spring.profiles.active = dev
1. 配置文件: 在配置文件中配置: spring.profiles.active = dev
2. 虚拟机参数: 在VM options指定: -Dspring.profiles.active = dev
3. 命令行参数: java -jar xxx.jar --spring.profiles.active = dev
4. 内部加载顺序
Springboot程序启动时,会从以下位置加载配置文件
- file:./config/: 当前项目下的/config目录下
- file:./:当前项目的根目录
- classpath:/config/: classpath的/config目录下
- classpath:/ :classpath的根目录(我们平常在resources下写的配置文件会被打包到这个目录下)
加载顺序为以上的排列顺序,相同属性高优先级配置会生效,低优先级的其他属性同样生效
5. 内部加载顺序
打包不会把config目录下的配置打进去
我们可以通过命令行制定响应的参数,例如:
java -jar .\java-spring-boot-0.0.1-SNAPSHOT.jar --server.port=8082
但是如果配置太多,全部用命令去敲,显然会很繁琐,所以我们可以写一个配置文件,我们先把他放在D盘的根目录下,叫做【application.yaml】,里面写如下内容:
server:
port: 8088
spring:
porfiles: dev
server:
port: 8088
spring:
porfiles: dev
然后使用命令指定当前配置:
java -jar .\java-spring-boot-0.0.1-SNAPSHOT.jar --spring.config.location=d://application.yaml
如果和jar包在同级目录,我们可以使用相对路径:
java -jar .\java-spring-boot-0.0.1-SNAPSHOT.jar --spring.config.location=./application.yaml
如果配置文件和jar包在同级目录,或者同级目录的config文件,可以不用指定配置文件,他会默认加载这两个路径的配置文件
*注意: config目录的优先级的优先级会更高