Spring Boot 配置文件

目录

一、配置文件的作用

二、配置文件的格式

1. properties

2. yml

三、两种配置文件的使用(语法格式)

1. properties 是以键值的格式配置的,key 和 value 之间是用 等号 连接的;

1.1 读取配置文件

1.2 properties 缺点:

2. yml 是树形结构的配置文件,基本配置语法是 “ key:value”,注:在key和value 之间是使用英文冒号和空格的方式来隔开的。

2.1 yml 方式配置

2.2 读取自定义配置

2.3 配置对象

2.4 .yml 配置文件优点:

四、.properties VS yml


前言

    上一篇文章介绍了Spring Boot 创建和使用后,还需要了解 Spring Boot 的配置文件,配置文件在整个 Spring Boot 中的作用也是很重要的,如果没有配置信息,此时的项目就不能连接和操作数据库,并且排查问题使用的一些日志也不能进行保存。

一、配置文件的作用

1. 连接数据库的配置信息(用户名和密码的配置)
2. 整个项目启动之后的端口号
3. 用于定位问题的日志
4. 第三方系统的调用密钥等信息

二、配置文件的格式

    Spring Boot 的配置文件分为两种模式:

  •  .properties
  •  .yml(.yaml)  (一般通常用 yml 表示,是 yaml 的缩写)

1. properties

    创建好一个 Spring Boot 项目之后,可以在 resource 目录下看到 一个配置文件,文件后缀名为 .properties 的配置文件,如下图:

Spring Boot 配置文件_第1张图片

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

2. yml

    另一种格式是 .yml 格式

Spring Boot 配置文件_第2张图片

 说明:

    1. properties 可以和 yml 配置文件同时存在域一个项目中,如果存在于一个项目中,当配置文件中设置了同样的配置参数,此时 .properties  配置文件的优先级最高,但是在加载完成 .properties 配置之后,也会继续加载 .yml 配置文件中的配置信息。

    2. 在实际开发中,通常只会用一种配置文件,这样就可以更好的降低 代码的冲突。

三、两种配置文件的使用(语法格式)

1. properties 是以键值的格式配置的,key 和 value 之间是用 等号 连接的;

Spring Boot 配置文件_第3张图片

 1.1 读取配置文件

    启动项目之后可以看到此时的端口号是8084:

Spring Boot 配置文件_第4张图片

     然后新建一个 TextController 类,加上注册路由的注解,最后写一个 sayHi 方法:

 Spring Boot 配置文件_第5张图片

     重启项目之后可以在浏览器中访问上图中注册的路由地址,运行结果如下图:

Spring Boot 配置文件_第6张图片

     注:在企业中一个服务器可能会运行很多个程序,当 Spring Boot项目启动之后,默认的端口号是 8080,但是如果一台服务器中有很多个 Spring Boot 项目时,此时就不能所有的 Spring Boot 项目全部使用 8080 端口,所以就需要设置 配置文件中的端口。

 1.2 properties 缺点:

Spring Boot 配置文件_第7张图片

     上图所示:使用 .properties 配置文件 如果有相同的配置参数,并且有多级路径,此时需要重复写很多次 key,此时就产生了代码冗余,写起来不方便,但是如果使用 .yml 就解决了这个问题。

2. yml 是树形结构的配置文件,基本配置语法是 “ key:value”,注:在key和value 之间是使用英文冒号和空格的方式来隔开的。

Spring Boot 配置文件_第8张图片

2.1 yml 方式配置

    上述代码已经在 .yml 配置文件中配置项目端口为 9990,此时可以看一下运行结果:

     使用浏览器访问 sayHi 方法:

Spring Boot 配置文件_第9张图片

 2.2 读取自定义配置

    首先在 .yml 配置文件中写好自定义的配置,然后通过注解的方式主动读取 配置文件中的配置信息,最后在控制台进行输出:

Spring Boot 配置文件_第10张图片

   如果在项目中主动读取配置文件中的内容,可以使用 @Value 注解来实现,@Value 注解中的参数使用 “${}” 的格式读取,如下代码所示:

package com.example.demo.controller;

import com.example.demo.enity.StudentComponent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.PostConstruct;

@Controller
@ResponseBody //加在类上表示当前类中的所有方法返回的都是非静态页面的数据
public class TextController {
   
    @Value("${mystr1}")
    private String mystr1;

    @Value("${mystr2}")
    private String mystr2;

    @Value("${mystr3}")
    private String mystr3;

    @PostConstruct
    public void doPostConstruct() {
        System.out.println("----------------------");
        System.out.println(mystr1);
        System.out.println(mystr2);
        System.out.println(mystr3);
        System.out.println("----------------------");
    }
}

    运行结果:

Spring Boot 配置文件_第11张图片

     注:三个参数中的 value 的不同的区别:如果一个字符串没有双引号什么都不加,此时就是所见即所得,如果是一个双引号,此时就是一个标准的字符串,会自动读取里边的换行符并识别; 如果是单引号,和什么都不加的效果是一样的。 

     因此只有加了双引号之后,才是一个标准的字符串的格式的参数。

 2.3 配置对象

    在yml 配置文件中不仅可以配置字符串参数,还可以配置对象:

Spring Boot 配置文件_第12张图片

     在 yml 配置文件中 配置了对象信息之后需要有一个实体类来接收这个对象,因此先创建一个实体类:

package com.example.demo.enity;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@ConfigurationProperties("student")//读配置文件
@Component
@Setter
@Getter
@ToString
public class StudentComponent {
    private int id;
    private String name;
    private int age;
}

    此时主动读取配置文件中的信息就不能使用 @Value 注解了,需要使用@ConfigurationProperties 注解来完成对象的读取 ,括号中的参数就是配置信息中的对象的名称:studnet;之后要记得重写 ToString 方法,方便打印对象的信息:

@Value("${student.name}")
    private String name;

@Autowired
    private StudentComponent studentComponent;


    @PostConstruct
    public void doPostConstruct() {
        
        System.out.println("name -> " + name);
        System.out.println(studentComponent);
        System.out.println();
    }

    注:在得到对象中的某个参数时,可以使用 @Value 注解,但是在读取配置文件中的对象时,需要使用@ConfigurationProperties 注解。

    运行结果:

 2.4 .yml 配置文件优点:

  • yml 语法和 JSON 格式类似,写法简单,没有代码冗余,只需要写一次路径就可以将配置信息完成
  • yml 支持更多的数据类型,可以配置字符串,数组,对象.... 适合用于数据结构的编辑,各种类型的配置文件
  • yml 支持更多的编程语言,不只是 Java,在 Golang,PHP,Python 中也是支持 .yml 文件配置的

四、.properties VS yml

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

你可能感兴趣的:(JavaEE进阶,spring,boot,java,linux)