Spring获取配置方式

Spring 中获取配置的三种方式

  1. 通过 @Value 方式动态获取单个配置

  2. 通过 @ConfigurationProperties + 前缀方式批量获取配置

  3. 通过 Environment 动态获取单个配置

通过 @Value 动态获取单个配置

  1. 作用

    1. 可修饰到任一变量获取,使用较灵活

  2. 优点

    1. 使用简单,且使用关联的链路较短

  3. 缺点

    1. 配置名不能被有效枚举到

    2. 每一个配置的使用都需重新定义,使用较为麻烦

    3. 项目强依赖配置的定义,配置不存在则会导致项目无法启动

  4. 使用场景

    1. 项目强依赖该配置的加载,想要从源头避免因配置缺失导致的未知问题

    2. 只想使用少数几个配置

  5. 配置示例

             1.

     6. 代码示例

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

    @Test
    public void getValue(){

        System.out.println("name=="+name);

    }

  

通过 @ConfigurationProperties + 前缀方式批量获取

  1. 作用

    1. 用于配置类的修饰或批量配置的获取

  2. 优点

    1. 使用配置只需确定 key 的前缀即能使用,有利于批量获取场景的使用

    2. 因采用前缀匹配,所以在使用新的相同前缀 key 的配置时无需改动代码

  3. 缺点

    1. 使用复杂,需定义配置类或者手动创建 bean 后引入使用

    2. 增加新的前缀相同 key 时可能会引入不稳定因素

  4. 使用场景

    1. 需要同时使用多前缀相同 key 的配置

    2. 期望增加新配置但不修改代码的 properties 注入

     5. 配置示例

        

    6. 代码示例

        

/**
 * @description: 人类
 * @author: Mr.Peach
 * @create: 2022-03-09 13:36
 **/
@Data
@Component
@ConfigurationProperties(prefix = "people")
public class People {

    private String name;

    private String sex;

    private int age;

    private List<String> likes;

}

 

    @Autowired
    private People people;

    @Test
    public void getPeople(){

        System.out.println("people=="+people.toString());

    }

 

当然也可以通过配置类@Bean中进行配置绑定,我是直接在类上进行的

通过 Environment 动态获取单个配置

  1. 作用

    1. 用于动态在程序代码中获取配置,而配置 key 不需提前定义

  2. 优点

    1. 获取的配置的 key 可不提前定义,程序灵活性高

    2. 配置 key 可使用枚举统一放置与管理

  3. 缺点

    1. 使用较复杂,需继承 Environment 接口形成工具类进行获取

    2. 获取 key 对应的枚举与 key 定义分离,value 获取链路较长

  4. 使用场景

    1. 只需使用少量的配置

    2. 获取配置的 key 无提前定义,需要根据对配置的有无进行灵活使用

  5. 配置示例

            

     6. 代码示例

         


/**
 * @description: 环境配置
 * @author: Mr.Peach
 * @create: 2022-03-09 15:32
 **/
@Component
public class ConfigByEnvironment implements EnvironmentAware {

    private static final Logger log = LoggerFactory.getLogger(ConfigByEnvironment.class);

    private Environment environment;

    public Optional<String> get(String configKey){
        String config = environment.getProperty(configKey);
        return Objects.isNull(config) ? Optional.empty() : Optional.of(config);
    }

    public void get(String configKey, Consumer<String> consumer){
        Optional<String> config = get(configKey);
        if(!config.isPresent()){
            log.warn("application config, get config by key fail, key: {}", configKey);
        }
        config.ifPresent(consumer);
    }

    @Override
    public void setEnvironment(@NonNull Environment environment) {

        this.environment = environment;

    }

 

 

/**
 * @description: 环境配置key
 * @author: Mr.Peach
 * @create: 2022-03-09 15:46
 **/
public enum  ConfigByEnvironmentKey {

    MY_CONF("my.conf", "我的配置");

    private String key;

    private String description;

    ConfigByEnvironmentKey(String key, String description) {
        this.key = key;
        this.description = description;
    }

    public String getKey() {
        return key;
    }

    public String getDescription() {
        return description;
    }

}

 


    @Autowired
    private ConfigByEnvironment configByEnvironment;

    private String value;

    @Test
    public void getEnvironment(){

        Optional<String> optionalS = configByEnvironment.get((ConfigByEnvironmentKey.MY_CONF.getKey()));
        System.out.println("optionalS=="+optionalS.get());

        configByEnvironment.get(ConfigByEnvironmentKey.MY_CONF.getKey(), (String val)->{
            System.out.println("val==="+val);
            value=val;
        } );

        System.out.println("value===="+value);

    }

 

 到此结束~~

都是亲自验证过的,可直接使用~

最后截个图总结一下啦

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值