我是靠谱客的博主 忧心胡萝卜,最近开发中收集的这篇文章主要介绍SpringBoot中@ConfigurationProperties和@value绑定配置信息的区别,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一.@ConfigurationProperties绑定配置信息

1.编写Bean

/*
 * 读取配置文件application.properties中配置,不需要注解@PropertySource指定配置文件位置。
 *  配置文件路径:properties/config.properties
 * @ConfigurationProperties:告诉springboot将本类中所有属性和配置文件中相关的配置进行绑定;
 * prefix="person":指出将配置文件中person下的所有属性进行一一映射;
 *
 * 注意:只有当前这个类是容器中的组件时,才可以用容器提供的@ConfigurationProperties功能;
 *
 * */

@PropertySource(value = {"classpath:properties/config.properties"})
@ConfigurationProperties(prefix="person")
@Data
@Component
public class PersonConfigurePropertiesBean {
    private String userName;
    private Integer age;
    private Boolean boss;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Car myCar;
    private List<Car> myCarLists;
    private Map<String,Car> myCarMap;
}

@Data
public class Car {
    private String colour;
    private Integer prize;

}

2.配置信息

#配置person的属性值
#------------------------------------普通属性
person.user-name=cuihua
person.age=18
person.boss=false
person.birth=1992/02/20
#------------------------------------map集合
person.maps[k1]=jone
person.maps[k2]=peter
#等价于
#person.maps.k1=jone
#person.maps.k2=peter
#------------------------------------List集合跟数组
person.lists=a,b,c
#等价于
#person.lists[0]=a
#person.lists[1]=b
#person.lists[2]=c
#-------------------------------------对象测试
person.myCar.colour=red
person.myCar.prize=100000
#等价于
#person.myCar[colour]=red
#person.myCar[prize]=100000
#------------------------------------复杂list测试
person.myCarLists[0].colour=red
person.myCarLists[0].prize=10000
#等价于
#person.myCarLists[0][colour]=red
#person.myCarLists[0][prize]=10000
#--------------------------------------复杂的map测试
person.myCarMap[k1].colour=red
person.myCarMap[k1].prize=10000
#等价于
#person.myCarMap[k1][colour]=red
#person.myCarMap[k1][prize]=10000
#等价于
#person.myCarMap.k1.prize=10000
#等价于
#person.myCarMap.k1.[prize]=10000

3.测试

 @RunWith(SpringRunner.class)
    @SpringBootTest
    public class TestApplicationConfig {
        @Autowired
        PersonConfigurePropertiesBean personConfigurePropertiesBean;

        @Test
        public void testPersonProperties(){
            System.out.println(personConfigurePropertiesBean);
        }
    }

 4.结果

PersonConfigurePropertiesBean(userName=cuihua, age=18, boss=false, birth=Thu Feb 20 00:00:00 CST 1992, maps={k2=peter, k1=jone}, lists=[a, b, c], myCar=Car(colour=red, prize=100000), myCarLists=[Car(colour=red, prize=10000)], myCarMap={k1=Car(colour=red, prize=10000)})

二.@Value绑定配置信息

1编辑Bean

PropertySource(value = {"classpath:properties/config.properties"})
//@ConfigurationProperties(prefix="person")
@Data
@Component
public class PersonConfigurePropertiesBean {

    @Value("${person.user-name}")
    private String personuserName;

    @Value("#{5*2}")  // spring表达式
    private Integer age;

    @Value("true") // boolean值
    private Boolean boss;

    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Car myCar;
    private List<Car> myCarLists;
    private Map<String,Car> myCarMap;
}

 

2.结果

PersonConfigurePropertiesBean(personuserName=cuihua, age=10, boss=true, birth=null, maps=null, lists=null, myCar=null, myCarLists=null, myCarMap=null)

@ConfigurationProperties和@Value对比

功能 @ConfigurationProperties @Value
 根据配置文件中设置的属性批量注入属性值  单个指定值
松散语法 支持(lastName可以写作last-name、last_name)不支持
SpEL(Spring表达式)  不支持支持
复杂类型封装支持     不支持
JSR303数据校验支持(可以通过@Email等注解校验属性值是否符合要求)不支持


应用场景
如果只是某个业务中需要获取配置文件中的某项值或者设置具体值,可以使用@Value;
如果一个JavaBean中大量属性值要和配置文件进行映射,可以使用@ConfigurationProperties;
参考:https://blog.csdn.net/XU906722/article/details/81517429 

最后

以上就是忧心胡萝卜为你收集整理的SpringBoot中@ConfigurationProperties和@value绑定配置信息的区别的全部内容,希望文章能够帮你解决SpringBoot中@ConfigurationProperties和@value绑定配置信息的区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部