這里只討論使用 @Value("${key}") 的方式來讀取配置文件中的數據。
配置單個數據(中間沒有英文逗號,后續會解釋為什么這么區分)
純數字
可以使用String 、Integer、int來接收,比如:【待驗證】
delay.time.second=3
接收
@Value("${delay.time.second}")
private String delayTimeSecond;
@Value("${delay.time.second}")
private int delayTimeSecond;
@Value("${delay.time.second}")
private Integer delayTimeSecond;
帶英文或漢字
只能使用String、String[] 來接收,其中如果使用String[]來接收的話,只有一個屬性
delay.time.second=1s
接收
@Value("${delay.time.second}")
private String delayTimeSecond;
@Value("${delay.time.second}")
private String[] delayTimeSecond;
配置多個數據(使用英文逗號分割)
前面說明了只有一個數據時,不同的value對應的支持固定的數據類型來接收。簡單來講,就是純數字的時候可以使用數字相關的類型來接收,且會自動的類型轉換,但是如果包含了字母、漢字或者符號,就不可以了。
這里解釋一下為什么我以是否包含英文逗號來表示是一個數據還是多個數據,因為在之前我測試的時候,為了簡單,我使用的是spring boot測試的,在springboot中,如果我們按照下面的方式寫配置文件數據,是可以被程序自動識別為數組的,如果其中每一項都是數字,則還可以使用數字相關的類型來接收,但是在spring framework中還不支持,在spring framework中,只要包含了符號,就只能是String類型或者String[]。
delay.time.second=3,4,5
接收
@Value("${delay.time.second}")
private Ineger[] delayTimeSecond;
相關報錯內容
以英文逗號將數據分割成多個內容,並使用數組接收,比如
delay.jobType=190,56
接收
@Value("${delay.jobType}")
private Integer[] delayJobTypeListIntegerArray;
報錯
nested exception is org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer[]'; nested exception is java.lang.NumberFormatException: For input string: "190,56"
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
補充
ymal支持數組,可是properties我們剛剛也發現了是不支持的,如果我們的項目使用的springboot,當然也可以使用英文逗號來實現將數據轉換為數組,但是如果項目是SSM的框架,我們可以這么做來實現相同的功能:
1、數據使用英文逗號來分割
2、使用String類型來接收
3、在代碼中對String數據以英文逗號進行分割,手工的轉換為數組