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 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值