SpringBoot配置文件

文章目录

    • 配置文件
    • 配置文件的格式
      • .properties格式
      • .yml格式
      • 配置信息读取
    • .properties VS .yml
    • 多平台配置文件的设置

配置文件

配置文件是用来配置整个项目中的重要数据的,像最基本项目的启动端口、数据库的连接信息等等。对于一个完整的SpringBoot项目而言,配置文件是必不可少的一部分,对于项目的重要性自然也不言而喻。

配置文件的格式

SpringBoot配置文件主要有下面两种格式:

  • .properties
  • .yml
    SpringBoot配置文件_第1张图片
    下面具体对两种格式的配置文件进行介绍:

.properties格式

.properties格式的配置信息设置方法如下,即不同级的配置项之间用点号.连接,配置项与具体的配置信息之间用等号=连接;
SpringBoot配置文件_第2张图片

通过.properties格式设置配置信息,运行项目,可以在控制台看到具体的配置是否成功:

SpringBoot配置文件_第3张图片

对于.properties格式的配置文件,其优点无疑也就是写法简单,key-value的形式也不易出错;但同时缺点也很明显,即这种配置格式的写法不够灵活和简便,对于一些同级的配置项,同样的前缀可能需要书写多次;

.yml格式

yml是YMAL的缩写,等价于YMAL;这种格式的配置信息设置方法如下,使用了更多的空白符和缩进的规则,是一种树形结构的设置方式;它的基本语法格式是 key: value ,在key和value之间使用英文冒号和一个空格分割,这里的空格不可以省略;

SpringBoot配置文件_第4张图片
正确书写的情况下,编译器会对key进行高亮显示;

.yml的格式的可读性要更强,同时解决了数据冗余的问题,也要更加灵活和简洁。

  • yml格式可以配置不同的数据类型,包括NULL值:
    SpringBoot配置文件_第5张图片
  • yml格式的value值在进行配置时,默认是不加任何单引号或双引号的,但如果加上引号,可以表示特殊的含义:

首先在yml配置文件中进行下面的配置:

string1:
  str1: it is \n a good day
  str2: 'it is \n a good day'
  str3: "it is \n a good day"

在类中进行配置信息的读取:

package com.example.demo;

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

@RestController
@RequestMapping("/user1")
public class UserController1 {

    @Value("${string1.str1}")
    private String str1;

    @Value("${string1.str2}")
    private String str2;

    @Value("${string1.str3}")
    private String str3;


    @PostConstruct
    public void postConstruct(){
        System.out.println("str1: "+str1);
        System.out.println("str2: "+str2);
        System.out.println("str3: "+str3);
    }
}

程序运行结果:

SpringBoot配置文件_第6张图片
被双引号修饰的value值,其中的特殊字符会发挥自身的用途;

  • 在yml中配置对象

可以在yml配置文件中进行对象的相关配置,再通过调用类进行调用,获取配置信息时需要使用到注解@ConfigurationProperties(prefix = “xxxxx”);

SpringBoot配置文件_第7张图片
创建一个对应的类对象,将配置文件中的配置信息赋值给相应的类对象:

package com.example.demo.model;

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

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

    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 getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }


}

必须在上面的类中定义getter 和 setter方法,当然也可以使用注解@Setter;

最后在其他需要的类中调用类对象即可:

package com.example.demo;

import com.example.demo.model.Student1;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
    @Autowired

    private Student1 student1;

    @PostConstruct
    public void postConstruct(){
        System.out.println("------------------------------------------------");
        System.out.println("id="+student1.getId()+" name="+student1.getName());
        System.out.println("------------------------------------------------");

    }
}

运行结果:

SpringBoot配置文件_第8张图片

关于在yml中配置对象,还可以采用行内写法的方式:

SpringBoot配置文件_第9张图片

行内写法的配置信息获取与一般写法相同,使用注解@ConfigurationProperties(prefix = “xxxx”)即可:

SpringBoot配置文件_第10张图片

  • yml配置集合

可以在yml配置文件中配置集合,同样有一般和行内两种写法:
SpringBoot配置文件_第11张图片
获取配置文件的信息时,同样使用注解@ConfigurationProperties(prefix = “xxxx”)实现

SpringBoot配置文件_第12张图片

SpringBoot配置文件_第13张图片

另外,关于@ConfigurationProperties注解,需要使用注册注解一起使用,表示将对象进行了spring注入;由于该注解是通过setter将配置文件中的内容赋值给指定字段的,因此读取配置文件的实体类必须有setter方法(可以添加setter方法,也可以使用@Setter注解)

配置信息读取

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
@RequestMapping("/user")
public class UserController {

    @Value("${mykey.key1}")
    private String myKey;

    @RequestMapping("/key1")
    public String key1(){

        return "key1="+myKey;
    }
}

SpringBoot配置文件_第14张图片
配置信息的读取是借助注解@Value来完成的,同时注解之后的参数格式也有固定格式,只有遵循这种格式,才能读取配置信息成功;

.properties VS .yml

  • properties格式是key=value的键值对的设置方式,yml格式是类似于json格式的树形结构的设置方式,使用冒号+空格的语法规则;
  • properties的配置方法存在数据冗余的问题,yml的配置方式解决了数据冗余的问题;
  • yml支持更多语言,通用性要更好;
  • 两种格式的配置文件在一个项目中同时存在且产生配置冲突时,以properties格式的为主;但为了降低项目的故障率,更好的维护项目,建议采用统一的配置文件格式,以避免出现各种问题;

多平台配置文件的设置

在一些特定的情况下,对于一个项目而言,可能会出现在不同的平台或环境下需要调用不同的配置文件,如果是在每次需要调用的特定情况下才进行相应的配置文件修改,必然是一件费事又费力的操作,因此需要分别设置不同平台环境下的配置文件,在相应的情况下进行相应的修改调用即可;

一般而言,常见的配置文件会使用在生产、测试、开发等环境下,因此我们以三种情况下的多平台配置文件设置进行介绍:

SpringBoot配置文件_第15张图片

关于在何种情况下使用何种环境下的配置文件,可以在主配置文件中进行设置:

SpringBoot配置文件_第16张图片
关于不同环境下的配置文件的命名,必须遵守其他部分保持不变,添加表示特定环境的标识即可;

over!

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