SpringBoot中配置文件详解(yml、properties全局配置和自定义配置),获取配置方式

时间:2023-04-08 11:09:57

目录

全局配置文件

application.properties配置文件

application.yaml配置文件

 value值为普通数据类型(例如数字、字符串、布尔等)

 value值为数组和单列集合

 value值为Map集合

 value值为对象或嵌套对象

@Value

自定义配置

使用@PropertySource加载配置文件

随机数设置及参数间引用

随机值设置

参数间引用


全局配置文件

全局配置文件是能够对一些默认配置值进行修改。Spring Boot使用一个application.properties或者application.yml的文件作为全局配置文件,该文件存放在src/main/resource目录或者类路径的/config,一般会选择resource目录。

   application.properties配置文件

server.port=8080
spring.config.name=peach
spring.application.name=peach-properties
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=xxxx
spring.redis.database=0

演示将application.properties配置文件中的自定义配置属性注入到PropertiesConfig实体类的对应属性中

package com.peach.demo.vo;

import lombok.Data;

/**
 * @program: YLT
 * @description: 人类
 * @author: Mr.peach
 * @create: 2023-04-02 23:46
 **/
@Data
public class People {

    private Integer id;
    private String name;
    private int age;

}
package com.peach.demo.config;

import com.peach.demo.vo.People;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

/**
 * @program: YLT
 * @description: 配置类
 * @author: Mr.peach
 * @create: 2023-04-02 23:48
 **/
@ConfigurationProperties(prefix = "peach-pro")
@Component
@Data
public class PropertiesConfig {

    private Integer id;
    private String userName;
    private List liek;
    private String[] family;
    private Map map;
    private People people;

}
  • 在resources目录下创建的application.properties文件配置如下:

    SpringBoot中配置文件详解(yml、properties全局配置和自定义配置),获取配置方式

 编写application.properties配置文件时,由于要配置的PropertiesConfig对象属性是我们自定义的,Spring Boot无法自动识别,所以不会有任何书写提示。在实际开发中,为了出现代码提示的效果来方便配置,在使用@ConfigurationProperties注解进行配置文件属性值注入时,可以在pom.xml文件中添加一个SpringBoot提供的配置处理器依赖:

        <!--自定义配置提示-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>

重新运行项目启动类或者重新构建可生效

SpringBoot中配置文件详解(yml、properties全局配置和自定义配置),获取配置方式

 测试配置效果

SpringBoot中配置文件详解(yml、properties全局配置和自定义配置),获取配置方式

SpringBoot中配置文件详解(yml、properties全局配置和自定义配置),获取配置方式

application.yaml配置文件

        YAML文件格式是Spring Boot支持的一种JSON超集文件格式,相较于传统的Properties配置文件,YAML文件以数据为核心,是一种更为直观且容易被电脑识别的数据序列化格式。application.yaml配置文件的工作原理和application.properties是一样的,只不过yaml格式配置文件看起来更简洁一些。我本人开发过程中一般用这种格式,更简洁更有层次感。 YAML文件的扩展名可以使用.yml或者.yaml。 application.yml文件使用“key:(空格)value"格式配置属性,使用缩进控制层级关系。

value值为普通数据类型(例如数字、字符串、布尔等)

SpringBoot中配置文件详解(yml、properties全局配置和自定义配置),获取配置方式

 value值为数组和单列集合

        当YAML配置文件中配置的属性值为数组或单列集合类型时,主要有两种书写方式︰缩进式写法和行内式写法。缩进式有两种写法,行内式写法如下:

SpringBoot中配置文件详解(yml、properties全局配置和自定义配置),获取配置方式

 value值为Map集合

SpringBoot中配置文件详解(yml、properties全局配置和自定义配置),获取配置方式

 value值为对象或嵌套对象

SpringBoot中配置文件详解(yml、properties全局配置和自定义配置),获取配置方式

SpringBoot中配置文件详解(yml、properties全局配置和自定义配置),获取配置方式

注意:application.properties和application.yml如果配置相同属性,application.properties会覆盖application.yml的配置。 

@Value

支持基本属性的注入,对于包含Map集合、对象以及YAML文件格式的行内式写法的配置文件的属性注入都不支持,如果赋值会出现错误

自定义配置

可以说,几乎所有的配置都可以写在application.peroperties文件中,Spring Boot会自动加载全局配置文件从而免除我们手动加载的烦恼。但是,如果我们自定义配置文件,Spring Boot是无法识别这些配置文件的,此时就需要我们手动加载。

使用@PropertySource加载配置文件

对于这种加载自定义配置文件的需求,可以使用@PropertySource注解结合@Configuration注解配置类的方式来实现。@PropertySource注解用于指定自定义配置文件的具体位置和名称。同时,为了保证Spring Boot能够扫描该注解,还需要类上添加@Configuration注解将实体类作为自定义配置类。当然,如果需要将自定义配置文件中的属性值注入到对应类的属性中,可以使用@ConfigurationProperties或者@Value注解进行属性值注入

  • 打开Spring Boot项目的resources目录,在项目的类路径下新建一个peach.properties自定义配置文件,在该配置文件中编写需要设置的配置属性。

SpringBoot中配置文件详解(yml、properties全局配置和自定义配置),获取配置方式

  • 新创建一个配置类CustomPropertiesConfig,提供zjq.properties自定义配置文件中对应的属性,并根据@PropertySource注解的使用进行相关配置

SpringBoot中配置文件详解(yml、properties全局配置和自定义配置),获取配置方式

随机数设置及参数间引用

在Spring Boot配置文件中设置属性时,除了可以像前面示例中显示的配置属性值外,还可以使用随机值和参数间引用对属性值进行设置。下面,针对配置文件中这两种属性值的设置方式进行讲解。

随机值设置

在Spring Boot配置文件中,随机值设置使用到了Spring Boot内嵌的RandomValuePropertySource类,对一些隐秘属性值或者测试用例属性值进行随机值注入。 随机值设置的语法格式为${random.xx},xx表示需要指定生成的随机数类型和范围,它可以生成随机的整数、uuid或字符串,示例代码如下:

  # ${random.value} # 配置随机值
  # ${random.int} #配置随机整数
  # ${random.long} # 配置随机long类型数
  # ${random.uuid} # 配置随机uuid类型数
  # ${random.int(10)} #配置小于10的随机整数
  #${random.int[1024,65536]} # 配置范围在[ 1024,65536]之间的随机整

参数间引用

  在Spring Boot配置文件中,配置文件的属性值还可以进行参数间的引用,也就是在后一个配置的属性值中直接引用先前已经定义过的属性,这样可以直接解析其中的属性值了。 使用参数间引用的好处就是,在多个具有相互关联的配置属性中,只需要对其中一处属性预先配置,其他地方都可以引用,省去了后续多处修改的麻烦 参数间引用的语法格式为${xx},xx表示先前在配置文件中已经配置过的属性名