淘先锋技术网

首页 1 2 3 4 5 6 7

  yml配置文件比properties配置文件更为强大,下面一 一概述

  1. 缩进规则:
    yml配置文件的每一段都要进行缩进,一段代表一级,并且键和值之间必须得有个空格,否则spring boot会不认识你这个键,例如
spring:
   datasource:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/demo
      username: root
      password: root

这样能让每一段都看的清清楚楚,肯定会比下面的properties好得多

spring.datasource.driVerclAssname=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root
spring.datasource.password=root
  1. 松散的命名:不区分大小写,可以省略连字符等
# 松散命名,把driver的连字符去掉了,并且把Class和Name首字母变成大写
spring:
   datasource:
      driverClass-Name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/demo
      username: root
      password: root

# 正规命名
spring.datasource.driVerclAssname=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root
spring.datasource.password=root

但如果是properties的话,会不允许这种松散命名,否则会报错。

  1. 嵌套对象

  yml里可以嵌套一个类,但嵌套的本质是把配置文件的信息赋值给自己编写的类中,例如现在有个demo实体类

// 自动生成get set toString方法的注解
@Data
// 此前缀就是在yml配置文件里的级别最高的那一段,作用是让yml里的demo和类里的demo能够匹配
@ConfigurationProperties(prefix = "demo")
public class Demo {
    private Integer id;
    private String name;
}
// 这个类的字段必须有getter,setter,并且与配置文件中去掉前缀之后的名字匹配

yml配置文件

demo:
  id: 1
  name: admin

启动类

// 启动类注解
@SpringBootApplication
// 将Demo类注册到spring中,相当于被spring管理
@EnableConfigurationProperties(Demo.class)
public class YmlApplication implements CommandLineRunner {
    @Autowired
    private Demo demo;
    
    public static void main(String[] args) {
        SpringApplication.run(YmlApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
       System.out.println("-----debug: demo = " + demo);
    }

}

输出结果
在这里插入图片描述
  注册的方式有两种,第一种是在启动类里加上@EnableConfigurationProperties(要注册的类,可以是数组),第二种是在要注册的类上面加上@Component,推荐第一种的原因也是因为第二种要在每个类上加注解,太过麻烦。

  匹配的方式也有两种,一种是加@ConfigurationProperties(prefix = “demo”)注解,第二种是加@Value注解,推荐第一种的原因是因为第一种支持松散命名。

  1. 随机数

在yml里可以用${}表达式生成随机数或者其他的一些东西,但properties没有

# 表示生成20-100之间的一个整数
demo:
  id: ${random.int(20,100)}
  name: admin

输出结果
在这里插入图片描述

  1. 引用其他变量
    不仅可以引用自己类的变量,也可以引用别的类的变量
demo:
  id: ${random.int(20,100)}
  name: ${demo.id} admin

输出结果
在这里插入图片描述

  1. 数组
demo:
  id: ${random.int(20,100)}
  name:
    - xx
    - aa

当然Demo类的name也要变成数组类型才行

@Data
@Component
@ConfigurationProperties(prefix = "demo")
public class Demo {
    private Integer id;
    private String[] name;
}

运行结果
在这里插入图片描述
当然也可以存集合,只是需要实体类那边更换类型,这边就不细说了。

  1. 键值对编写

    首先在实体类中加上Map集合字段类型。

@Data
@Component
@ConfigurationProperties(prefix = "demo")
public class Demo {
    private Integer id;
    private String[] name;
    private Map<String, Integer> scores;
}

yml配置文件

demo:
  id: ${random.int(20,100)}
  name:
    - xx
    - aa
  scores:
    yuwen: 10
    shuxue: 20

运行结果
在这里插入图片描述

  1. 多配置文件

    第一种写法:在一个配置文件中编写多个配置,用—分割

demo:
  id: 8000
  name: main
  
# 指定选用哪个配置文件
spring:
  profiles:
    active: production
---
spring:
  profiles:
    dev

demo:
  id: 8080

---
spring:
  profiles:
    production
demo:
  id: 80

一开始demo的id是8080的,name是main,但是它引用了叫producttion的配置文件,所以demo的id就会被替换成production的id
在这里插入图片描述
第二种写法:有多个配置文件,在主配置文件中指定使用哪一个

  第二种写法大致和第一种一样,不过就是把配置分成了一个个文件。

  1. 引入其他配置文件

application.yml

spring:
  profiles:
    include: dev

application-dev.yml

demo:
	id: 1
	name: main

运行结果
在这里插入图片描述