@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入文件中的属性 | 一个一个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
spel | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
用@Value获取值
@Component
//@ConfigurationProperties(prefix = "people")
public class People {
/**
* <bean class="people">
* <property name="lastName" value="字面量/${key}从环境变量,配置文件中获取值/#{spel}"></property>
* </bean>
*/
//${key}
@Value("${people.lastName}")
private String lastName;
//#{}
@Value("#{11*2}")
private Integer age;
@Value("${people.boss}")
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<String> pets;
private Dog dog;
用@ConfigurationProperties获取值
@Component
@ConfigurationProperties(prefix = "people")
public class People {
/**
* <bean class="people">
* <property name="lastName" value="字面量/${key}从环境变量,配置文件中获取值/#{spel}"></property>
* </bean>
*/
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<String> pets;
private Dog dog;
1.松散语法
@ConfigurationProperties属性名匹配规则
- person.firstName:使用标准方式
- person.first_name:大写用_
- person.first-name:大写用-
2 .数据校验
@Component
@ConfigurationProperties(prefix = "people")
//校验注解
@Validated
public class People {
//检查lastName是否符合邮件格式
@Email
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<String> pets;
private Dog dog;
3. 复杂类型封装
@Value只能获取基本数据类型
@ConfigurationProperties可以获取map,list等封装类型的值
4.总结
- 配置文件yaml和properties都可以获取到值
- 如果只是需要在业务逻辑中获取一下配置文件中的某个值,使用@Value
- 如果是要把javabean和配置文件进行一一映射,使用@ConfigurationProperties
//RestController相当于@Controller和@ResponseBody
@RestController
public class HelloController {
@Value("${people.lastName}")
private String name;
@RequestMapping("/hello")
public String hello(){
return "I LOVE "+name;
}
}