Spring使用自定义配置项.md

Spring使用自定义配置项.md

tk_sky 220 2022-10-02

在写Spring应用的时候,经常会用到Spring支持的application.yml 或 application.properties 来对Spring的一些属性进行设置。

实际上,Spring的这些配置项是与Spring内部的一些bean一一对应的。在配置文件修改这些属性时,就是在修改Spring运行时对应的一些bean的各种属性。

application.yml 和 application.properties 的区别:

本质上他们的作用相同,仅仅是格式不同而已。.yml使用yaml格式,用冒号和缩进表示属性、参数以及层级关系;.properties格式用.来作为层级的区分。

基于这种配置项与bean的一一对应关系,我们可以通过Spring提供的注解来使得我们的bean与自定义的配置项挂钩。

为了使得一个模块专注于自己的事而不必兼顾配置项的读取,最好将一个模块需要用到的配置项抽取出来,集合到一个专用于储存配置的类中,比如下面的类AppConfig

package cc.mcyou.jmstest;

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

@Component
@ConfigurationProperties(prefix = "mcyou.config")
@Data
public class AppConfig {
    boolean config1 = true; //默认值
    int config2 = 1;
}

注解说明:

  • 使用Spring提供的注解@ConfigurationProperties 即可告诉Spring应该将这个类纳入配置项管理。属性prefix表示在配置项里这个类的属性将在哪个层级下表示。

  • 为了使其他类能够使用配置类读取配置项,用@Component将其注册为bean。在需要的类处使用@autowired引入即可。

  • 由于Spring管理配置时都会使用set get等标准bean方法,所以这里必须提供get set方法,否则配置项不生效。这里用lombok的@Data

接下来在对应的.yml或.properties文件里进行配置即可。

mcyou:
  config:
    config1: false
    config2: 2

除了在这里配置,自定义配置同样可以通过部署环境的环境变量进行调整。