Skip to content
本页目录

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程序启动时,会从以下位置加载配置文件

  1. file:./config/: 当前项目下的/config目录下
  2. file:./:当前项目的根目录
  3. classpath:/config/: classpath的/config目录下
  4. 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目录的优先级的优先级会更高