springboot 读取 yml 配置的几种方式

文章目录

  • 前言
  • 一、Yml文件规则及数据格式表示方式
      • 1、普通类型(数字,字符串,布尔)
      • 2、对象、Map
      • 3、 数组(List)
  • 二、获取YML文件内容
    • 1.第一种:@Value方式
    • 2.第二种:@ConfigurationProperties
    • 3.第三种:@Evnironment
    • 4.第四种:@PropertySource 结合@ConfigurationProperties 获取指定yml文件中的配置属性
  • 三、YML多环境配置设置


前言

在springboot 项目中一般默认的配置文件是application.properties,但是实际项目中我们一般会使用application.yml 文件,下面就介绍一下在springboot 中读取 yml 配置的几种方式.


一、Yml文件规则及数据格式表示方式

key: value 格式书写
key 后面跟着冒号,再后面跟着一个空格,然后是值

  1. 普通类型(数字,字符串,布尔)
  2. 对象、Map
  3. 数组(List)

1、普通类型(数字,字符串,布尔)

age: 18
name:	小明
isright: true

注意:

字符串默认不用加上单引号或者双引号;
“”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi
‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi

2、对象、Map

k: v的方式

#方式一:
person:
	name: 小强
	age: 18

#方式二:
person: {name: 小qiang,age: 19 }

3、 数组(List)

用- 值表示数组中的一个元素,如:

myList:
	- week1
	- week2
	- 18

二、获取YML文件内容

YML文件内容application.yml:

##自定义全局配置属性
mywebconfig:
  name: xiaoqiang
  age: 18
  mail: [email protected]
  Person:
    code: 12345
    name: pppp1

1.第一种:@Value方式

通过@Value获取配置属性赋值给配置类属性

@Data
@Configuration
//配置类
public class MyWebConfig {
    @Value("${mywebconfig.name}")
    private String name;
    
    @Value("${mywebconfig.age}")
    private Integer age;
    
    @Value("${mywebconfig.mail}")
    private String mail;
    
    @Value("${mywebconfig.person}")
    private Person person;

}

测试:

    @Test
    void myTest(){
        System.out.println(
                myWebConfig.getName()
        );
    }

2.第二种:@ConfigurationProperties

通过在配置类上添加@ConfigurationProperties注解绑定yml配置属性取值

@Data
@Configuration
@ConfigurationProperties(prefix = "mywebconfig")
public class MyWebConfig {
    private String name;

    private Integer age;

    private String mail;
    
    private Person person;

}

测试:

3.第三种:@Evnironment

使用原生方法直接获取配置类数据

@RestController
@RequestMapping("/deptment")
public class DeptMentController {
    
    @Autowired
    Environment env;

    /**
     * 通过环境变量注解获取YML属性值
     * */
    @RequestMapping("/getP")
    public String getP() {

        return env.getProperty("mywebconfig.Person.name" );
    }

}

4.第四种:@PropertySource 结合@ConfigurationProperties 获取指定yml文件中的配置属性

注意:
SpringBoot的 @PropertySource 注解只支持加载 properties结尾的文件。

三、YML多环境配置设置

#多配置环境下,激活环境dev
spring:
  profiles:
    active: dev
---
#测试环境
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: gq861204.
    driver-class-name: com.mysql.cj.jdbc.Driver

  config:
    activate:
      on-profile: test

server:
  port: 10088
---
#开发环境
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: gq861204.
    driver-class-name: com.mysql.cj.jdbc.Driver

  config:
    activate:
      on-profile: dev
server:
  port: 10089

你可能感兴趣的:(springboot,spring,boot)