第三篇: spring-boot中的讀取配置文件

前言

任何一個項目不可能少得了配置文件, 所以配置文件在spring-boot中有很多呈現(xiàn)方式,本篇主要介紹一下最常用的配置文件的方式,代碼依附于第一篇開發(fā)的簡單Hello World的微服務(wù),并且項目代碼也是和第一篇的代碼在同一個項目之中。

常規(guī)配置

  1. 最常用的 key-value 形式的配置就是通過 @Value 注解

假設(shè)配置文件 application.yaml里面的內(nèi)容為

key1: value1
key2: ${value2:default_value2}

然后代碼中使用了

  @Value("${key1}")
  private String key1;

  @Value("${key2}")
  private String key2;

  @Value("${key3:default_value3}")
  private String key3;

對于配置文件里面的key1表示,對應(yīng)的值是value1, 如果使用@Value("${key1}") 的時候沒有找到對應(yīng)的值程序就會拋出異常退出。

對于配置文件里面的key2表示,對應(yīng)的值是default_value2, 但是可以支持通過手動設(shè)置java啟動參數(shù)-Dvalue2來設(shè)置value2來改變默認值。

對于 @Value("${key3:default_value3}") 表示試圖去找配置文件中的 key3, 如果找到了就用配置文件中的值,沒有找到的話,不會拋出異常,而是用 default_value3 替代。

  1. 把配置文件轉(zhuǎn)成對象
    首先在配置類上面使用注解
@Configuration
@EnableConfigurationProperties({
    CollectionConfig.class, QiNiuConfig.class
})

其中注解 @Configuration 表示這個類為配置類,需要讀配置文件,@EnableConfigurationProperties 表示需要可以把配置文件映射成 CollectionConfigQiNiuConfig 類的對象,是符合java的面向?qū)ο蟮乃枷氲摹?/p>

(1) 對象類型: 下面是QiNiuConfig

@Validated
@ConfigurationProperties(prefix = "qiniuParam")
public class QiNiuConfig {
  @NotNull
  private String accessKey;
  @NotNull
  private String secretKey;
  private String localImageFilePath;
  private int otherParam1;
  @NotNull
  private int otherParam2;
//  @NotNull
  private Integer otherParam3;
}

對應(yīng)的配置文件

qiniuParam:
  accessKey: testAccessKey
  secretKey: testSecretKey
  localImageFilePath: /data/localUpdateFile/
  otherParam1: 11111

在spring-boot的1.5.x版本里面,加入了對于配置對象的字段進行了驗證的功能,我們在類上面加上@Validated 注解, 然后在字段上面增加@NotNull 表示該字段不能為空,也可以增加其他注解, 進行各種參數(shù)規(guī)則的校驗,然后@ConfigurationProperties 注解表示前綴統(tǒng)一,可以看到我們配置文件中的對象都是屬于 qiniuParam 域之下的,所以我們加了prefix=qiniuParam,另外還有一點要注意,@NotNull 注解,在java的原生類型的時候是不會生效的,可以看到配置文件中 otherParam2 并沒有賦值,但是啟動不會出錯,他會默認把原生類型 int 賦值成0, 如果把 int 改成了 Integer,啟動就會出錯。

(2) 集合類型
配置文件

list:
  - list_value1
  - list_value2
  - list_value3

map:
  map_key1: map_value1
  map_key2: map_value2

集合類型不能用@Value進行注入,必須要通過類對象進行構(gòu)造

@Validated
@ConfigurationProperties
public class CollectionConfig {
  @NotNull
  private List<String> list;
  @NotNull
  private Map<String, String> map;
}

同樣可以增加參數(shù)驗證注解來配合進行驗證。并且注意,配置文件只支持list類型和map類型的配置參數(shù)。

(3) 其他
如果一定要利用@Value來接受list參數(shù),可以通過利用 @Value注解的表達式函數(shù)進行解析

@Value("#{'${list}'.split(',')}")
private List<String> list;

@Value("#{${map}}")  
private Map<String,String> map;

然后配置文件中寫成

list: topic1,topic2,topic3
map: "{key1: 'value1', key2: 'value2'}"

ps: 注意上面的map解析中,一定要用""把map所對應(yīng)的value包起來,要不然解析會失敗,導(dǎo)致不能轉(zhuǎn)成 Map<String,String> map; 對象。

相關(guān)代碼在

https://github.com/dragontree101/spring-boot-tutorials

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容