@ConfigurationProperties和@value区别
@ConfigurationProperties | @value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散语法 | 支持 | 不支持 |
SpEl | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
1.松散语法:
当年使用@ConfigurationProperties时,在配置文件中为对应属性赋值,如
person:
public class Person {
private String LastName;
private int age;
yaml文件:
person:
last-name: zhangsan
age: 20
其中lastName可以写成last-name,是没有影响的。
当你使用@value时,你在person类中这样写
person:
public class Person {
@value("${person.lastName})
private String LastName;
private int age;
yaml文件:
person:
last-name: zhangsan
age: 20
它是不支持的,因为person类中value引用的值和yaml中last-name是不同的
可以将yaml文件中last-name改为lastName或者将value中的person.lastName改为last-name。
2.SpEl
在person类中使用value("${10*2})时在取得结果时是可以算出来的,而使用@ConfigurationProperties时,在配置文件中使用,如
person:
last-name: zhangsan
age: 10*2
是不行的
3.JSR303数据校验
如代码
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
@Email
private String lastName;
private int age;
当加入@Validated时在lastName上加入@Email代表lastName格式要写成邮箱格式
4.复杂类型封装
如map,list这些@ConfigurationPropertie是支持的,@value是不支持的
如果说,只是在某项业务逻辑使用某个值,可以直接使用@value