SpringBoot配置文件详解

SpringBoot配置文件详解_第1张图片 

目录

一、配置文件的作用

二、配置文件的格式

三、properties 配置文件说明

3.1 properties 基本语法 

3.2 读取配置⽂件

3.23properties 配置缺点分析

四、yml 配置文件说明

yml 优点分析

4.1 yml 基本语法

4.2 yml 配置简单的数据类型及 null 

4.3 yml 配置对象 

 4.4 yml 配置 list 集合

五、properties 和 yml 的总结

六、Spring Boot 读取配置文件的方法

使用 Environment 读取配置文件

一、配置文件的作用

整个项⽬中所有重要的数据都是在配置⽂件中配置的,⽐如:

  1. 数据库的连接信息(包含⽤户名和密码的设置);
  2. 项⽬的启动端⼝;
  3. 第三⽅系统的调⽤秘钥等信息;
  4. ⽤于发现和定位问题的普通⽇志和异常⽇志等。

想象⼀下如果没有配置信息,那么 Spring Boot 项⽬就不能连接和操作数据库,甚⾄是不能保存可以⽤于排查问题的关键⽇志,所以配置⽂件的作⽤是⾮常重要的

除了上述的内容,还有很多重要的属性都需要在配置文件中配置。如果想要查看 Spring Boot 更多系统配置项,Spring 的官网中已经整理好了这些信息。链接如下:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties

二、配置文件的格式

Spring Boot 的配置文件主要有两种格式

  1. .properties
  2. .yml

这两个的功能是一样的,但是,这两个是不同时代的产物,properties 相当于老款的配置文件,而 yml 相当于新款的配置文件,要想使用新款的配置文件,在 /src/main/resources 目录下手动创建一个 application.yml 文件就行

要注意的是在创建 Spring Boot 项目时,项目默认会带一个 application.properties 配置文件

SpringBoot配置文件详解_第2张图片

补充:

  1. 理论上讲 properties 可以和 yml ⼀起存在于⼀个项⽬当中,当 properties 和 yml ⼀起存在⼀个项⽬中时,如果配置⽂件中出现了同样的配置,那么这个时候会以 properties 中的配置为主,也就是 .properties 配置⽂件的优先级最⾼,但加载完 .properties ⽂件之后,也会加载 .yml ⽂件的配置信息。
  2. 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取⼀种统⼀的配置⽂件格式,这样可以更好的维护(降低故障率)。

三、properties 配置文件说明

properties 配置⽂件是最早期的配置⽂件格式,也是创建 Spring Boot 项⽬默认的配置⽂件

3.1 properties 基本语法 

properties 是以键值对的形式配置的,key 和 value 之间用 = 号来连接的。key 就是要配置的属性,value 就是要设置的值。

 实例代码:

#配置端口号信息
server.port=8081
#配置数据库信息
spring.datasource.url=jdbc:mysql://localhost:3306
spring.datasource.name=root
spring.datasource.password=123456

3.2 读取配置⽂件

如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤ @Value 注解来实现。
@Value 注解使⽤“${}”的格式读取,如下代码所示

package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadProperties {

    @Value("${server.port}")
    private String port;

    @PostConstruct
    public void doPostConstruct(){
        System.out.println("port = "+ port);
    }
}

 SpringBoot配置文件详解_第3张图片

SpringBoot配置文件详解_第4张图片

@Component 在 Spring Boot 启动时候会注⼊到框架中,注⼊到框架中时会执⾏ @PostConstruct初始化⽅法,这个时候就能读取到配置信息了。 

3.23properties 配置缺点分析

properties 配置是以 key-value 的形式配置的,如下图所示:
 从上述配置key看出,properties 配置⽂件中会有很多的冗余的信息 ,想要解决这个问题,就可以使⽤ yml 配置⽂件的格式化了

四、yml 配置文件说明

yml 是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中⽂就是“另⼀种标记语
⾔”。

yml 优点分析

  1. yml 是⼀个可读性⾼,写法简单、易于理解,它的语法和 JSON 语⾔类似。
  2. yml ⽀持更多的数据类型,它可以简单表达清单(数组)、散列表,标量等数据形态。它使⽤空⽩符号缩进和⼤量依赖外观的特⾊,特别适合⽤来表达或编辑数据结构、各种配置⽂件等。
  3. yml ⽀持更多的编程语⾔,它不⽌是 Java 中可以使⽤在 Golang、PHP、Python、Ruby、JavaScript、Perl 中

4.1 yml 基本语法

yml 是树型结构的配置文件,它的基础形式是 key: value,yml 的基础语法具有以下的规则:

  • key: value 表示键值对关系,冒号后面必须有一个空格

  • 使用空格的缩进表示层级关系,空格数目不重要,只要是左对齐的一列数据,都是同一个层级的

  • 大小写敏感

SpringBoot配置文件详解_第5张图片

其中第⼀项的配置为正确的,key 也是⾼亮显示的,⽽第⼆项没有空格是错误的使⽤⽅式,第⼆项的key 也没有⾼亮显示。

配置数据库示例:

SpringBoot配置文件详解_第6张图片
 

4.2 yml 配置简单的数据类型及 null 

yml 配置:


#字符串
string:
  value: hello zifuchuan

#整型
int:
  value: 10

#布尔类型
boolean:
  value: tru

读取代码: 通过 @Value 注解来读取配置中的简单数据类型和 null 

package com.example.demo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ReadYml {

    @Value("${int.value}")
    private int val;

    @Value("${string.value}")
    private String val2;

    @Value("${boolean.value}")
    private boolean val3;

    @RequestMapping("/read")
    public void read(){
        System.out.println("整数 =>"+ val);
        System.out.println("字符串 =>"+ val2);
        System.out.println("布尔类型 =>"+ val3);
    }
}

SpringBoot配置文件详解_第7张图片 

在 yml 中,字符串如果使用了双引号包裹,那么特殊字符是不会转义的,比如 \n 就表示换行;而如果字符串什么都不包裹或者用单引号包裹,那么特殊字符就会自动进行转义。 

4.3 yml 配置对象 

yml 配置:

#写法一
student:
  id: 1
  name: 竹筒
  age: 250
#写法二
user: {id: 2, username: 小白, age: 2}

 读取代码:

首先需要创建一个匹配配置文件中对象的类,并且读取配置文件中的对象就不能使用 @Value 注解,而需要使用 @ConfigurationProperties 注解,该注解放在创建的类上,并且有一个 prefix 属性用于设置配置文件中对应的 key。创建的类中必须要有 Setter 和 Getter 方法。

package com.example.demo;


import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "student")
public class Student {
    private int id;
    private String name;
    private int age;

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

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    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;
    }
}

 通过创建的类读取到配置文件的对象后,将该类注册到 Spring 容器中,当使用时,直接通过 @Autowired 或者 @Resource 注解注入就好。

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ReadYml {


    @Autowired
    private Student student;

    @RequestMapping("/student")
    public void stu(){
        System.out.println(student.toString());
    }


}

SpringBoot配置文件详解_第8张图片 

 4.4 yml 配置 list 集合

yml 配置:

#集合写法一
list:
  animal6:
    - 狗
    - 猫
    - 马
#集合写法二
list2: {fruit: [苹果,香蕉,西瓜]}

读取代码:

yml 配置集合时,也需要通过 @ConfigurationProperties 注解来读取,该注解的 prefix 属性对应着上述 yml 配置的 dbtypes1 或者 dbtypes2。接下来创建一个匹配配置文件中集合的类

 千万注意(private List animal6;) 这块配置的名字必须与yml中对应

package com.example.demo;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@ConfigurationProperties(prefix = "list")
public class ListObjec {

    private List animal6;

    public List getAnimal6() {
        return animal6;
    }

    public void setAnimal6(List animal6) {
        this.animal6 = animal6;
    }
}

 通过创建的类读取到配置文件的对象后,将该类注册到 Spring 容器中,当使用时,直接通过 @Autowired 或者 @Resource 注解注入就好。

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
public class ReadYml {

    @Resource
    private ListObjec listo;

    @RequestMapping("/list")
    public void lis() {
        System.out.println("集合为= " + listo.getAnimal6());
    }


}

SpringBoot配置文件详解_第9张图片

五、properties 和 yml 的总结

  1.  properties 是以 key=value 的形式配置的键值类型的配置⽂件,⽽ yml 使⽤的是类似 json 格式的 树形配置⽅式进⾏配置的,yml 层级之间使⽤换⾏缩进的⽅式配置,key 和 value 之间使⽤“: ”英⽂ 冒号加空格的⽅式设置,并且空格不可省略。
  2. properties 为早期并且默认的配置⽂件格式,但其配置存在⼀定的冗余数据,使⽤ yml 可以很好的 解决数据冗余的问题。
  3. yml 通⽤性更好,⽀持更多语⾔,如 Java、Go、Python 等,如果是云服务器开发,可以使⽤⼀份 配置⽂件作为 Java 和 Go 的共同配置⽂件。
  4. yml 虽然可以和 properties 共存,但⼀个项⽬中建议使⽤统⼀的配置类型⽂件。
  5. yml 支持更多的数据类型

六、Spring Boot 读取配置文件的方法

  • 使用 @Value 读取配置文件
  • 使用 @ConfigurationProperties 读取配置文件
  • 使用 Environment 读取配置文件

前两种上面已经使用过  下面我们来测试一下第三种

Environment 是 Spring Core 中的一个用于读取配置文件的类,将此类使用 @Autowired 或者 @Resource 注入到类中就可以使用它的 getProperty 方法来获取某个配置项的值,代码如下所示:

使用 Environment 读取配置文件

 yml配置

#写法一
student:
  id: 1
  name: 竹筒
  age: 250

读取代码:

    @Autowired
    private Environment environment;
    @RequestMapping("/readE")
    public void read3(){
        System.out.println(environment.getProperty("student.name"));
    }

SpringBoot配置文件详解_第10张图片

 


以上就是我对SpringBoot配置文件的理解 ,如有错误还请指出

SpringBoot配置文件详解_第11张图片

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