美文网首页
Spring boot 通过@ConfigurationProp

Spring boot 通过@ConfigurationProp

作者: zornil | 来源:发表于2020-04-04 01:01 被阅读0次

通常情况下,在项目中都会有一些配置类,在配置初始化时候需要导入yml配置中配置好的值,很多情况下我们都能将简单类型值注入,如String,Integer,但是对于List或者Map注入确一知半解。本文主要是讲解一下使用何种方式能够成功注入不同类型数数据,并加以区分。

首先来几个例子

package org.jeecg.config;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

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

/**
 * Description
 * <p>
 * </p>
 * DATE 2020/4/3.
 *
 * @author zyq.
 */
@Data
@Component
@ConfigurationProperties(prefix = "test")
public class DemoConfiguration {

    /**
     * yaml和Properties都支持
     * 通过横线连接的形式注入
     * test:
     *   str-demo1: str-demo1
     */
    private String strDemo1;

    /**
     * yaml和Properties都支持
     * 通过小驼峰形式
     * test:
     *   strDemo2: strDemo2
     */
    private String strDemo2;

    /** yaml和Properties都支持
     *  通过下划线连接注入
     *  test:
     *    str_demo3: str_demo3
     */
    private String strDemo3;

    /**
     * yaml支持
     * Standard YAML list syntax:
     * test:
     *   list-demo1:
     *     - demo11
     *     - demo12
     */
    private List<String> listDemo1;

    /**
     * yaml和Properties配置文件支持
     * 数组形式,Standard list syntax using [ ]
     * test:
     *   list-demo2[0]: demo21
     *   list-demo2[1]: demo22
     */
    private List<String> listDemo2;

    /**
     * yaml和Properties都支持
     * 通过逗号分隔
     * list-demo3: demo31,dem32
     */
    private List<String> listDemo3;

    /**
     * yaml支持
     * 通过@Value形式注入失败, @Value("${test.map-demo1}")
     * 直接通过ConfigurationProperties(prefix = "test")配合注入
     * test:
     *   map-demo1:
     *     key1: value1
     *     key2: value2
     */
    private Map<String,String> mapDemo1;


    /**
     * yaml和Properties都支持
     * 该情况下只能通过@Value的Spel注入
     * test:
     *   map-demo2: "{key1: 'value1', key2: 'value2'}"
     */
    @Value("#{${test.map-demo2}}")
    private Map<String,String> maps;
}

在上述的例子中主要是对String、List和Map进行对比试验。
@ConfigurationProperties(prefix = "test")的引入,是的再写重复的@Value,能够将配置中的数据完全映射。特别是map的使用更加简单,不需要使用@ValueSpel表达式,就能搞定映射。
关于map和list在的代码中已经完全体现,并做了详细对比。
当然,不使用@Value的情况下,可能我们在查找某一个配置文件的值的就比较麻烦了。所以还是需要结合个人习惯、公司规范以及业务逻辑上选取最优的使用方式。
最后关于配置文件注解的还有很多骚操作,本文不再一一举例,参考官方文档

这里引用一下官方的ConfigurationProperties和Value的对比
@ConfigurationProperties和@Value

相关文章

网友评论

      本文标题:Spring boot 通过@ConfigurationProp

      本文链接:https://www.haomeiwen.com/subject/jksrphtx.html