@ConfigurationProperties | @value | |
功能 | 批量注入配置文件中的屬性 | 一個個指定 |
松散綁定(松散語法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303數據校驗 | 支持 | 不支持 |
復雜類型封裝 | 支持 | 不支持 |
所謂松散語法也就是屬性命名規則(Relaxed binding)
- person.firstName:使用標准方式 - person.first-name:大寫用- - person.first_name:大寫用_ - PERSON_FIRST_NAME: 系統屬性推薦使用這種寫法
@ConfigurationProperties支持松散語法 @Value不支持松散語法
application.properties文件中有字段 persion.first-name
@Component
@ConfigurationProperties(prefix = "person") public class Person { private String firstName;
}
JSR303數據校驗(@Validation)
@ConfigurationProperties @Validated 支持 @Value不支持
import javax.validation.constraints.NotNull; import org.hibernate.validator.constraints.Email; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.validation.annotation.Validated; @ConfigurationProperties @Validated public class Properties { @NotNull private String userName; @Email private String email; }
SpEl
@ConfigurationProperties不支持EL表達式
application.properties文件中有字段 person.userAge=12
userAge = 12 //可以
userAge = #{2*6} //EL表達式不支持
@Value支持EL表達式
@Value(userAge=#{2*6}) //支持EL表達式
使用原則:在某個業務邏輯中需要獲取一下配置文件中的某項值,使用@Value;如果專門編寫了一個javaBean來和配置文件進行映射,我們就直接使用@ConfigurationProperties;