YML配置文件

488 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第29天,点击查看活动详

大家好,我是bug郭,一名双非科班的在校大学生。对C/JAVA、数据结构、Spring系列框架、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流

作者简介:

YML配置文件

yml全称 YAML (YAML Ain't a Markup Language)YAML不是一种标记语言,通常以.yml为后缀的文件,是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,一种专门用来写配置文件的语言。. 可用于如: Java,C/C++, Ruby, Python, Perl, C#, PHP等。. 和其他高级语言类似,可以简单表达数组,列表,等数据形态! 通过空白符号缩进和大量依赖外观特点特别适合用于表达或编辑数据结构,各种配置文件! 最大优势就是跨语言!

基本语法

yml是树形结构的配置文件,基础语法是key: value键和值之前通过:英文冒号和 空格进行连接!冒号后面的空格不能省略!! 键值对之前通过换行分割!

#设置项目端口
server:
  port: 8090
# 配置数据库连接信息
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
    username: root
    password: 123456

key : value中间的空格不能省略! 在这里插入图片描述 如果省略了中间空格IDEA下key值没有语法高亮!!!

读取配置文件

package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadYML {
    @Value("${server.port}")
    private String port;
    @PostConstruct
    public void postConstruct(){
        System.out.println("Read YML,port:"+port);
    }
}

yml格式的配置文件读取方式和properties配置文件读取方式是相同的! 通过@Value("${}")注解读取! 在这里插入图片描述

yml配置使用

  • 可以配置不同类型的数据 及null
# 字符串
string.value: Hello
#布尔值 true/false
boolean.value: true
# 整数
int.value: 10
int.vaule1: 0b1010_0111_1010_1110 # 二进制
# 浮点数
float.value: 3.1415
float.value1: 3.14159e-5 # 科学计数法
# NUll ~ 代表 null
null.value: ~

在这里插入图片描述

字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义。

# 字符串默认不需要引号!
string:
  str1: Hello \n Spring Boot.
  str2: 'Hello \n Spring Boot.'
  str3: "Hello \n Spring Boot."

我们进行读取操作! 在这里插入图片描述

  • 字符串默认不用加上单引号或者双引号
  • 字符串加上单引号后,会转义特殊字符,使该特殊字符变成普通字符!
  • 双引号不会转义特殊字符的含义:就是说换行符会进行换行操作! 而默认不加引号或者加上单引号都会使换行符失去意义!

yml配置对象

#方式一:
student:
  name: 刘备
  age: 18
#方式二:
student1: {name: 刘备, age: 18}

在这里插入图片描述

配置的对象不能用@Value注解进行读取 要通过@ConfigurationProperties(prefix="keyname")注解进行读取!

package com.example.demo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
//通过这个注解将配置文件中的student对象信息初始化给实例Student注册到spring中!
//读取对象配置需要重写setter和getter方法才能读取到,否则无用!
@ConfigurationProperties(prefix = "student")
@Component
public class Student {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

@Component
public class ReadYML {
    @Autowired //注入对象
    private Student student;
    @PostConstruct
    public void postConstruct(){
        System.out.println(student);
    }
}

在这里插入图片描述 注意:

只有实现了getter和setter方法读取对象配置才能生效否则没用

配置集合

# 配置集合List
dbtypes:
  name:
    - mysql
    - sqlserver
    - db2

#行内写法
dbtypes1: {name: [mysql,sqlserve,db2]}

集合的读取方式和对象一样也是通过@ConfigurationProperties(prefix="")注解进行读取配置操作!

package com.example.demo;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;
@ConfigurationProperties(prefix = "dbtypes")
@Component
@Data //重写geter和setter方法
public class ListConfig {
   private List<String> name;//这里名字要和配置文件key对应否则失败!
}

在这里插入图片描述

properties配置和yml配置比较

  • .properties是以key=value键值对的形式配置文件, .yml还是树形结构的形式进行配置文件key value之前,通过: 加上空格设置空格不能省略!
  • properties为早期并且默认的配置格式,优先级比yml高,但是配置存在一定的冗余
  • yml通用性好,支持多语言配置文件如;java,python,golang等,如果是云服务开发,一份配置文件可以用于不同语言的代码!
  • yml虽然和properties共存,但是一般建议一个项目中使用统一格式的配置文件