1. 程式人生 > >springboot @value和@configurationproperties註解的區別

springboot @value和@configurationproperties註解的區別

系統 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 {

    @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;

springboot @value和@configurationproperties註解的區別