最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot配置文件相關(guān)語法及讀取方式詳解

 更新時(shí)間:2025年12月11日 14:27:13   作者:hi,你禮貌嗎  
本文主要介紹了Spring Boot中的兩種配置文件形式,即.properties文件和.yml/.yaml文件,詳細(xì)講解了這兩種文件的語法和讀取方式,同時(shí),還介紹了使用@ConfigurationProperties注解和Environment接口讀取配置文件的方法,并提供了具體的讀取示例

配置文件的形式

目前,springboot的配置文件有2種形式。

1、.properties文件,一般習(xí)慣稱其為properties文件,e.g.application.properties;

2、.yml/.yaml文件(2個(gè)后綴都是一樣的文件,一般常用.yml),一般習(xí)慣稱其為yaml文件,e.g.application.yml/application.yaml;

語法

它只有2種核心語法,一種是key-value,一種是數(shù)組,以下以.yml文件為主。

1、key-value形式

它支持字符串類型(支持轉(zhuǎn)義字符,比如\n同樣會(huì)換行,本質(zhì)就是String類型),數(shù)字類型和boolean類型,如下:

# .yml文件示例
config0:
  string: abcd      # 字符串
  number: 123       # 數(shù)字類型
  boolean: true     # boolean類型


# .properties文件示例
# config0.string=abcd
# config0.number=123
# config0.boolean=true

最常見的讀取方式示例如下:

@Value("${config0.string}")
private String config0String;

@Value("${config0.number}")
private int config0Number;

@Value("${config0.boolean}")
private boolean config0Boolean;

.yml文件還有另外一種行內(nèi)寫法(可讀性很差,所以并不常用),如下:

# 注意相關(guān)空格,且沒有任何引號(hào)。否則無法識(shí)別拋出異常
config0: {string: abcd,number: 123,boolean: true}

注:行內(nèi)寫法并不能直接轉(zhuǎn)為map,也只能通過config0.string...進(jìn)行讀取。

2、數(shù)組形式

它支持字符串類型(支持轉(zhuǎn)義字符,比如\n同樣會(huì)換行,本質(zhì)就是String類型),數(shù)字類型和boolean類型,如下:

# .yml文件示例,注意相關(guān)空格
config1:
  list:
    - abcd     # 字符串類型
    - 123      # 數(shù)字類型
    - true     # boolean類型


# .properties文件示例
#config1.list[0]=abcd
#config1.list[1]=123
#config1.list[2]=true

最常見的讀取方式示例如下:

@Value("${config1.list[0]}")
private  String config1String;
	
@Value("${config1.list[1]}")
private  int config1Number;
	
@Value("${config1.list[2]}")
private  boolean config1Boolean;

.yml文件還有另外一種行內(nèi)寫法(可讀性很差,所以并不常用),如下:

config1:
  list: [abcd, 123, true]

注:行內(nèi)寫法并不能直接轉(zhuǎn)為list,也只能通過config1.list[0]...進(jìn)行讀取。

總結(jié):不管配置文件多么的花里胡哨,都是由上面2種類型構(gòu)造而成。如下嘗試構(gòu)建一個(gè)復(fù)雜的配置文件。

# .yml文件示例
config2: 
  card: 
  - visa: 招商銀行信用卡
  - visa: 浦發(fā)銀行信用卡
  - 建設(shè)銀行
  - 中國銀行
  - 農(nóng)業(yè)銀行
  - 工商銀行
  name: 張三
  age : 28


# .properties文件示例
# config2.card[0].visa=招商銀行信用卡
# config2.card[1].visa=浦發(fā)銀行信用卡
# config2.card[2]=建設(shè)銀行
# config2.card[3]=中國銀行
# config2.card[4]=農(nóng)業(yè)銀行
# config2.card[5]=工商銀行
# config2.name=張三
# config2.age=28

讀取方式如下:

@Value("${config2.card[0].visa}")
private String visa1;
	
@Value("${config2.card[1].visa}")
private String visa2;
	
@Value("${config2.card[2]}")
private String bankcard1;
	
@Value("${config2.card[3]}")
private String bankcard2;
	
@Value("${config2.card[4]}")
private String bankcard3;
	
@Value("${config2.card[5]}")
private String bankcard4;
	
@Value("${config2.name}")
private String name;
	
@Value("${config2.age}")
private int age;

說明:上面的寫法是不能直接轉(zhuǎn)為java代碼中的map和list,不過,它是支持直接轉(zhuǎn)為map和list的。但是,直接轉(zhuǎn)為map和list和上面的寫法實(shí)現(xiàn)的目的是一樣的,需要遵循一些特殊寫法,如果需要在代碼中傳遞map或者list,在代碼中重新構(gòu)造即可,利用配置文件直接轉(zhuǎn)map或list,就是脫褲子放屁,核心就是上面的2種語法。

讀取方式

1、通過@value注解

上面已經(jīng)對(duì)其進(jìn)行過說明,這里舉例說明一下,直接將配置項(xiàng)轉(zhuǎn)map有多雞肋。

配置項(xiàng):

config: 
  map: '{"name": "張三", "age": 18}'

代碼:

// 外面需要包一個(gè)#{}
@Value("#{${config.map}}")
private Map<String, Object> configMap;

我認(rèn)為,它不僅可讀性差,還容易出錯(cuò),如果需要使用map,還不如讀取3個(gè)配置項(xiàng),重新構(gòu)造一個(gè)map對(duì)象。

注:不管是直接轉(zhuǎn)map的表達(dá)式還是上面的數(shù)組項(xiàng)讀取,都是由SpringEL表達(dá)式提供解析。

2、通過@ConfigurationProperties注解

使用@ConfigurationProperties注解的時(shí)候,建議引入以下jar包(編譯器會(huì)出現(xiàn)警告):

<dependency>
    <groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>

它常用于批量解析配置項(xiàng),所以構(gòu)建配置類的時(shí)候,用它就特別方便。

它與@Value有以下區(qū)別

1、@ConfigurationProperties不支持SringEL表達(dá)式,所以這里注意,它不能解析key-value與數(shù)組結(jié)合的形式,如下:

如果引入了<spring-boot-configuration-processor>jar包,這種復(fù)雜寫法編譯器會(huì)在配置文件中報(bào)錯(cuò)的。

# @ConfigurationProperties不能解析
config: 
  card: 
    - visa: 招商銀行信用卡
    - visa: 浦發(fā)銀行信用卡
    - 建設(shè)銀行
    - 中國銀行
    - 農(nóng)業(yè)銀行
    - 工商銀行

2、@ConfigurationProperties對(duì)于直接map和list比較方便;

3、@ConfigurationProperties支持JSR303數(shù)據(jù)校驗(yàn)。

@ConfigurationProperties注解常用屬性

1、prefix:用于指定配置項(xiàng)前綴;

2、value:同prefix,建議使用prefix,語義更明顯;

3、ignoreInvalidFields:忽略受校驗(yàn)的字段,默認(rèn)false;

4、ignoreUnknownFields忽略未識(shí)別的字段,默認(rèn)true。

配置文件:

config: 
  user: 
    name: 張三
    cards: 
      - 招商銀行
      - 建設(shè)銀行
    age: 28
    map: {key1: value1,key2: value2}

讀取代碼:

注:用@ConfigurationProperties讀取的時(shí)候,一定要提供set方法。

@Component
@ConfigurationProperties(prefix = "config.user")
public class UserBean {

	private String name;
	
	private List<String> cards;
	
	private String age;
	
	private Map<String, String> map;


    // 省略get/set

}

3、通過Environment(org.springframework.core.env.Environment)讀取

配置文件:

# 注意相關(guān)空格
config1:
  list:
    - abcd     # 字符串類型
    - 123      # 數(shù)字類型
    - true     # boolean類型

讀取代碼:

// 常用下面2個(gè)方法,一個(gè)是默認(rèn)以String類型讀取,一個(gè)是指定類型讀取
String config0String = env.getProperty("config0String");
int config0Number = env.getProperty("config0Number", Integer.class);
boolean config0Boolean = env.getProperty("config0Boolean", Boolean.class);

根據(jù)實(shí)際場景,選擇最適合的方式就是好方式。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 分布式調(diào)度器之Spring Task 的使用詳解

    分布式調(diào)度器之Spring Task 的使用詳解

    SpringTask是Spring框架中用于任務(wù)調(diào)度的組件,通過簡單的注解就能實(shí)現(xiàn)定時(shí)任務(wù)的創(chuàng)建和調(diào)度,可以通過配置線程池來實(shí)現(xiàn),本文給大家介紹分布式調(diào)度器之Spring Task 的使用,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • java集合與數(shù)組的相同點(diǎn)和不同點(diǎn)

    java集合與數(shù)組的相同點(diǎn)和不同點(diǎn)

    今天小編就為大家分享一篇關(guān)于java集合與數(shù)組的相同點(diǎn)和不同點(diǎn),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • SpringMVC Tomcat控制臺(tái)亂碼問題解決方案

    SpringMVC Tomcat控制臺(tái)亂碼問題解決方案

    這篇文章主要介紹了SpringMVC Tomcat控制臺(tái)亂碼問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java開發(fā)中synchronized的定義及用法詳解

    Java開發(fā)中synchronized的定義及用法詳解

    這篇文章主要介紹了Java開發(fā)中synchronized的定義及用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java使用wait/notify實(shí)現(xiàn)線程間通信下篇

    Java使用wait/notify實(shí)現(xiàn)線程間通信下篇

    wait()和notify()是直接隸屬于Object類,也就是說所有對(duì)象都擁有這一對(duì)方法,下面這篇文章主要給大家介紹了關(guān)于使用wait/notify實(shí)現(xiàn)線程間通信的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Springboot中實(shí)現(xiàn)策略模式+工廠模式的方法

    Springboot中實(shí)現(xiàn)策略模式+工廠模式的方法

    這篇文章主要介紹了Springboot中實(shí)現(xiàn)策略模式+工廠模式,具體策略模式和工廠模式的UML我就不給出來了,使用這個(gè)這兩個(gè)模式主要是防止程序中出現(xiàn)大量的IF ELSE IF ELSE....,接下來咱們直接實(shí)現(xiàn)Springboot策略模式工廠模式
    2022-03-03
  • 如何獲取jar包resources文件路徑

    如何獲取jar包resources文件路徑

    java項(xiàng)目發(fā)布到j(luò)ar之后找不到文件路徑,遇到這樣問題如何處理呢,下面小編給大家分享獲取jar包resources文件路徑的解決方法,感興趣的朋友一起看看吧
    2023-12-12
  • 詳解Java中的日期類

    詳解Java中的日期類

    這篇文章主要介紹了Java中的日期類的相關(guān)資料,幫助大家更好的利用Java處理時(shí)間,感興趣的朋友可以了解下
    2020-10-10
  • Java基于動(dòng)態(tài)規(guī)劃法實(shí)現(xiàn)求最長公共子序列及最長公共子字符串示例

    Java基于動(dòng)態(tài)規(guī)劃法實(shí)現(xiàn)求最長公共子序列及最長公共子字符串示例

    這篇文章主要介紹了Java基于動(dòng)態(tài)規(guī)劃法實(shí)現(xiàn)求最長公共子序列及最長公共子字符串,簡單描述了動(dòng)態(tài)規(guī)劃法的概念、原理,并結(jié)合實(shí)例形式分析了Java使用動(dòng)態(tài)規(guī)劃法求最長公共子序列以及最長公共子字符串相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-08-08
  • Spring配置多個(gè)數(shù)據(jù)源并實(shí)現(xiàn)動(dòng)態(tài)切換示例

    Spring配置多個(gè)數(shù)據(jù)源并實(shí)現(xiàn)動(dòng)態(tài)切換示例

    本篇文章主要介紹了Spring配置多個(gè)數(shù)據(jù)源并實(shí)現(xiàn)動(dòng)態(tài)切換示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04

最新評(píng)論

龙岩市| 保山市| 沧源| 甘谷县| 崇文区| 芜湖市| 昆山市| 延边| 温州市| 闽侯县| 若羌县| 绥芬河市| 寻甸| 泰兴市| 温泉县| 卓尼县| 响水县| 白银市| 友谊县| 湘阴县| 渑池县| 兴文县| 攀枝花市| 南陵县| 大英县| 湘潭县| 思茅市| 江华| 灌南县| 上杭县| 五河县| 德安县| 镇坪县| 托里县| 钦州市| 越西县| 双城市| 繁峙县| 湄潭县| 长葛市| 柳州市|