springboot @value和@configurationproperties註解的區別
阿新 • • 發佈:2018-05-28
系統 conf 系統屬性 borde prope frame sharp IE port
@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 { @NotNullprivate 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;
springboot @value和@configurationproperties註解的區別