Springboot学习笔记三、 @ConfigurationProperties 与@Value 对比
程序员文章站
2022-04-19 22:40:18
...
一、介绍
1、两个注解作用都是将每一个属性的值,映射到组件中。
2、@ConfigurationProperties 可以批量绑定配置文件中的值与类中的属性。
二、对比
@ConfigurationProperties | @Value | |
功能 | 批量注入配置文件中的属性 | 一个一个绑定 |
松撒绑定(松撒语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂数据类型封装 | 支持 | 不支持 |
1)说明松散绑定 是只 person.last-name 与类中 lastName中的绑定 用@Value绑定会报错
2)复杂类型封装是指 类似Map List 这种会报错
三、代码
package com.hao.firstdemo.configs;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.Email;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @author haoxiansheng
* @data 2020/5/27
*/
@Component
@ConfigurationProperties(prefix = "person") // 默认从全局文件中获取值
@PropertySource(value = {"classpath:person.properties"})
@Data
@Validated // 开启注解校验
public class Person {
/**
* <bean class="Person">
* <property name="lastName" value="字面量/${key}从环境变量配置文件中获取/#{SPEL}"><property/>
* <bean/>
*/
//@Email ConfigurationProperties 支持注解校验 Value 不支持
//@Value("${person.lastName}")
private String lastName;
//@Value("#{11*2}") // SPEL 表达式
private Integer age;
//@Value("true")
private Boolean boss;
private Date birth;
//@Value("${person.maps}") // 不支持复杂类型的封装
private Map<String, Object> maps;
private List<String> lists;
private Dog dog;
@Override
public String toString() {
return "Person{" +
"lastName='" + lastName + '\'' +
", age=" + age +
", boss=" + boss +
", birth=" + birth +
", maps=" + maps +
", lists=" + lists +
", dog=" + dog +
'}';
}
}
package com.hao.firstdemo.configs;
import lombok.Data;
import lombok.ToString;
/**
* @author haoxiansheng
* @data 2020/5/27
*/
@Data
@ToString
public class Dog {
private String name;
private Integer age;
}
// application,properties中的属性
server.port=8081
spring.profiles.active=dev
# 配置person的值
#person.last-name=zhangsan
person.lastName=zhangsan
person.age=18
person.birth=1996/01/02
person.boss=false
person.maps.k1=v1
person.maps.k2=v2
person.lists=a,b,c
person.dog.name=dog
person.dog.age=10
@PropertySource(value = {"classpath:person.properties"})
// 外部加载的方式
## 配置person的值
##person.last-name=zhangsan
#person.lastName=zhangsan
#person.age=18
#person.birth=1996/01/02
#person.boss=false
#person.maps.k1=v1
#person.maps.k2=v2
#person.lists=a,b,c
#person.dog.name=dog
#person.dog.age=10
四、批量绑定适合用 @ConfigurationProperties ,@Value适合绑定少一点的比如一两个
上一篇: 看身份挤公交搞笑大全
下一篇: 吹起警哨赶来制止