導航:首頁 > 文件管理 > yaml配置文件設計

yaml配置文件設計

發布時間:2023-01-25 13:24:35

Ⅰ 二、SpringBoot的配置--yaml

SpringBoot使用一個全局的配置文件,配置文件名是固定的;

配置文件的作用:修改SpringBoot自動配置的默認值;SpringBoot在底層都給我們自動配置好;

YAML 是一個標記語言

標記語言:

以前的配置文件;大多都使用的是xxx.xml文件

YAML:以數據為中心,比json、xml等更適合做配置文件

YAML:配置例子

XML:

k:(空格)v : 表示一對鍵值對(空格必須有)

以空格的縮進來控制層級關系;只要是左對齊的一列數據,都是同一個層級的

屬性和值也是大小寫敏感;

k: v :字面直接來寫;

字元串默認不用加上單引號或者雙引號;

"" :雙引號;不會轉義字元串裡面的特殊字元; 特殊字元會作為本身想表示的意思

name : "zhangsan lisi" :輸出 : zhangsan 換行 lisi

'' :單引號;會轉義特殊字元,特殊字元最終只是一個普通的字元串數據

name: 'zhangsan lisi' : 輸出 ; zhangsan lisi

k: v : 在下一行來寫對象的屬性和值的關系 ;注意縮進

對象還是 k: v 的方式

行內寫法:

用- 值表示數組中的一個元素

行內寫法

配置文件

javaBean:

我們可以導入配置文件處理器,以後編寫配置就有提示了

調整 圖示:

配置文件yml還是properties他們都能獲取到值;

如果說,我們只是在某個業務邏輯中需要獲取一下配置文件中的某項值,使用@Value

如果說,我們專門編寫一個javaBean來和配置文件進行映射,我們就直接使用@ConfigurationProperties

@ImportResource:導入Spring的配置文件,讓配置文件裡面的內容生效

SpringBoot裡面沒有Spring的配置文件,我們自己編寫的配置文件,也不能自動識別;

想讓Spring的配置文件生效,載入進來;@ImportResource標注在一個配置類上

不來編寫Spring的配置文件

Spring Boot推薦給容器添加組件的方式;推薦全註解的方式

1、配置類@Configuration------>Spring配置文件

2、使用@Bean給容器中添加組件

我們在主配置文件編寫的時候,文件名可以是application-{profile}.properties/yml

默認使用application.properties的配置

1、在配置文件中指定spring.profiles.active=dev

2、在命令行:

java -jar spring-boot-02-config.jar --spring.profiles.active=dev;

可以直接在測試的時候,配置傳入命令行參數

3.虛擬機參數

-Dspring.profiles.active=dev

springboot 啟動會掃描以下位置的application.properties或者application.yml文件作為Spring Boot的默認配置文件

-file:./config/

-file:./

-classpath:/config/

-classpath:/

優先順序由高到低,高優先順序的配置會覆蓋低優先順序的配置

SpringBoot會從這四個位置載入主配置文件:互補配置

==我們還可以通過spring.config.location來改變默認的配置文件位置==

項目打包好以後,我們可以使用命令行參數的形式,啟動項目的時候來指定配置文件的新位置;指定配置文件和默認載入的這些配置文件共同起作用互補配置;

java -jar spring-boot-02-config.jar --spring.config.location=G:/application.properties

==SpringBoot也可以從以下位置載入配置;優先順序從高到低;高優先順序的配置低優先順序的配置,所有的配置會形成互補配置==

1.命令行參數

2.來自java:comp/env的JNDI屬性

3.java系統屬性

4.操作系統環境變數

5.RandomValuePropertySource配置的random.*屬性值

==有jar包外箱jar包內進行尋找==

==優先載入帶profile==

6.jar包外部的application-{profile}.properties 或 application.yml(帶spring.profile)配置文件

7.jar包內部的application-{profile}.properties 或 application.yml(帶spring.profile)配置文件

==再來載入不帶profile==

8.jar包外部的application.properties或者application.yml(不帶spring.profile)配置文件

9.jar包內部的application.properties或者application.yml(不帶spring.profile)配置文件

精髓:

1》springboot啟動會載入大量的自動配置類

2》我們看我們需要的功能有沒有springboot默認寫好的自動配置類

3》我們再來看這個自動配置類中到底配置了那些組件;(只要我們要用的組件有,我們就不需要再來配置了)

4》給容器中自動配置類添加組件的時候,會從properties類中獲取某些屬性,我們就可以在配置文件中指定這些屬性的值

Ⅱ SpringBoot中yaml文件配置屬性

首先,在SpringBoot中,有兩種配置文件的方式。一種是application.properties,另一種application.yaml(或者是application.yml)。
yaml文件格式是SpringBoot支持的一種JSON超集文件格式,相對於傳統的Properties配置文件,yaml文件以數據為核心,是一種更為直觀且容易被計算機識別的數據序列化格式。application.yaml配置文件的工作原理和application.properties是一樣的,只是yaml格式配置文件看起來要跟簡潔一些。
application.yaml文件使用 key:(空格) value 格式配置屬性,使用縮進控制層關系

注意:此時port和path屬性,屬於同一層級

其中縮進式寫法有兩種表示形式,一種為:

另一種為:

上述兩種縮進式寫法為person對象的hobby屬性賦值,其中一種是通過「-(空格)屬性值」的形式為屬性賦值,另一種是直接賦值使用英文逗號分隔屬性值。

行內式的寫法顯然比縮進式寫法更加簡潔。使用行內式寫法設置屬性值時,中括弧「[ ]」是可以省略的,程序會自動匹配校對屬性的值

在yaml配置的屬性值為Map或對象類型時,縮進式的形式按照yaml文件格式編寫即可,而行內式寫法的屬性值要用大括弧「{ }」包含

Ⅲ Golang項目中引入yaml.v2配置文件

在Go語言項目中,常用的配置文件yaml、toml、json、xml、ini幾種,因為本章主要講解yaml配置文件的使用方法,其他幾種配置文件在這里就不展開了介紹了,大家有興趣可以自行網路
yaml文件的語法網上有很多的教程,大家自行網路,這里也推薦兩個鏈接:

yaml文件解析使用的是github上第三方開源框架 gopkg.in/yaml.v2 ,下面詳細介紹安裝和使用的方法:

參考鏈接: https://blog.csdn.net/wade3015/article/details/83351776

Ⅳ THINKPHP支持YAML配置文件的設置方法

為什麼要用
yaml
因為
Yaml
簡單,而且對人類友好;
Yaml:
http://www.yaml.org/
在哪裡會用到?
最基本的,在
ThinkPHP
的配置文件裡面就可以選擇
Yaml
的格式,你是願意寫
Yaml
的簡潔格式配置呢?還是願意寫又長又臭又難寫的
PHP
array
呢?
http://document.thinkphp.cn/manual_3_2.html#config_format
問題來了
於是,我把配置格式改為
Yaml:
復制代碼
代碼如下:
//
/index.php
//
定義配置文件的格式為
yaml
define('CONF_EXT',
'.yaml');

Ⅳ 現代配置指南——YAML 比 JSON 高級在哪

一直以來,前端工程中的配置大多都是 .js 文件或者 .json 文件,最常見的比如:

這些配置對前端非常友好,因為都是我們熟悉的 JS 對象結構。一般靜態化的配置會選擇 json 文件,而動態化的配置,涉及到引入其他模塊,因此會選擇 js 文件。

還有現在許多新工具同時支持多種配置,比如 Eslint ,兩種格式的配置任你選擇:

後來不知道什麼時候,突然出現了一種以 .yaml 或 .yml 為後綴的配置文件。一開始以為是某個程序的專有配置,後來發現這個後綴的文件出現的頻率越來越高,甚至 Eslint 也支持了第三種格式的配置 .eslintrc.yml 。

既然遇到了,那就去 探索 它!

下面我們從 YAML 的 出現背景 使用場景 具體用法 高級操作 四個方面,看一下這個流行的現代化配置的神秘之處。

一個新工具的出現避免不了有兩個原因:

YAML 這種新工具就屬於後者。其實在 yaml 出現之前 js+json 用得也不錯,也沒什麼特別難以處理的問題;但是 yaml 出現以後,開始覺得它好亂呀什麼東西,後來了解它後,越用越喜歡,一個字就是優雅。

很多文章說選擇 yaml 是因為 json 的各種問題,json 不適合做配置文件,這我覺得有些言過其實了。我更願意將 yaml 看做是 json 的升級,因為 yaml 在格式簡化和體驗上表現確實不錯,這個得承認。

下面我們對比 YAML 和 JSON,從兩方面分析:

JSON 比較繁瑣的地方是它嚴格的格式要求。比如這個對象:

在 JSON 中以下寫法通通都是錯的:

字元串的值必須 k->v 都是 "" 才行:

雖然是統一格式,但是使用上確實有不便利的地方。比如我在瀏覽器上測出了介面錯誤。然後把參數拷貝到 Postman 里調試,這時就我要手動給每個屬性和值加 "" 號,非常繁瑣。

YAML 則是另闢蹊徑,直接把字元串符號幹掉了。上面對象的同等 yaml 配置如下:

沒錯,就這么簡單!

除了 "" 號,yaml 覺得 {} 和 [] 這種符號也是多餘的,不如一起幹掉。

於是呢,以這個對象數組為例:

轉換成 yaml 是這樣的:

對比一下這個精簡程度,有什麼理由不愛它?

說起增加的部分,最值得一提的,是 YAML 支持了 注釋 。

用 JSON 寫配置是不能有注釋的,這就意味著我們的配置不會有備注,配置多了會非常凌亂,這是最不人性化的地方。

現在 yaml 支持了備注,以後配置可以是這樣的:

把這種配置丟給新同事,還怕他看不懂配了啥嗎?

除注釋外,還支持配置復用的相關功能,這個後面說。

我接觸的第一個 yaml 配置是 Flutter 項目的包管理文件 pubspec.yaml ,這個文件的作用和前端項目中的 package.json 一樣,用於存放一些全局配置和應用依賴的包和版本

看一下它的基本結構:

你看這個結構和 package.json 是不是基本一致? dependencies 下列出應用依賴和版本, dev_dependencies 下的則是開發依賴。

後來在做 CI/CD 自動化部署的時候,我們用到了 GitHub Action。它需要多個 yaml 文件來定義不同的工作流,這個配置可比 flutter 復雜得多。

其實不光 GitHub Action,其他流行的類似的構建工具如 GitLab CI/CD,circleci,全部都是齊刷刷的 yaml 配置,因此如果你的項目要做 CI/CD 持續集成,不懂 yaml 語法肯定是不行的。

還有,接觸過 Docker 的同學肯定知道 Docker Compose,它是 Docker 官方的單機編排工具,其配置文件 docker-compose.yml 也是妥妥的 yaml 格式。現在 Docker 正是如日中天的時候,使用 Docker 必然免不了編排,因此 yaml 語法早晚也要攻克。

上面說的這 3 個案例,幾乎都是現代最新最流行的框架/工具。從它們身上可以看出來,yaml 必然是下一代配置文件的標准,並且是 前端-後端-運維 的通用標准。

說了這么多,你躍躍欲試了嗎?下面我們詳細介紹 yaml 語法。

介紹 yaml 語法會對比 json 解釋,以便我們快速理解。

先看一下 yaml 的幾個特點:

相比於 JSON 來說,最大的區別是用 縮進 來表示層級,這個和 Python 非常接近。還有強化的一點是支持了注釋,JSON 默認是不支持的(雖然 TS 支持),這也對配置文件非常重要。

YAML 支持以下幾種數據結構:

先看對象,上一個 json 例子:

轉換成 yaml:

對象是最核心的結構,key 值的表示方法是 [key]: ,注意這里 冒號後面有個空格,一定不能少 。value 的值就是一個 純量 ,且默認不需要引號。

數組和對象的結構差不多,區別是在 key 前用一個 - 符號標識這個是數組項。注意這里 也有一個空格 ,同樣也不能少。

轉換成 JSON 格式如下:

了解了基本的對象和數組,我們再來看一個復雜的結構。

眾所周知,在實際項目配置中很少有簡單的對象或數組,大多都是對象和數組相互嵌套而成。在 js 中我們稱之為對象數組,而在 yaml 中我們叫 復合結構 。

比如這樣一個稍復雜的 JSON:

轉換成復合結構的 YAML:

若你想嘗試更復雜結構的轉換,可以在 這個 網頁中在線實踐。

純量比較簡單,對應的就是 js 的基本數據類型,支持如下:

比較特殊的兩個,null 用 ~ 符號表示,時間大多用 2021-12-21 這種格式表示,如:

轉換成 JS 後:

在 yaml 實戰過程中,遇到過一些特殊場景,可能需要一些特殊的處理。

在 shell 中我們常見到一些參數很多,然後特別長的命令,如果命令都寫在一行的話可讀性會非常差。

假設下面的是一條長命令:

linux 中可以這樣處理:

就是在每行後加 符號標識換行。然而在 YAML 中更簡單,不需要加任何符號,直接換行即可:

YAML 默認會把換行符轉換成 空格 ,因此轉換後 JSON 如下,正是我們需要的:

然而有時候,我們的需求是 保留換行符 ,並不是把它轉換成空格,又該怎麼辦呢?

這個也簡單,只需要在首行加一個 | 符號:

轉換成 JSON 變成了這樣:

獲取配置是指,在 YAML 文件中定義的某個配置,如何在代碼(JS)里獲取?

比如前端在 package.json 里有一個 version 的配置項表示應用版本,我們要在代碼中獲取版本,可以這么寫:

JSON 是可以直接導入的,YAML 可就不行了,那怎麼辦呢?我們分環境解析:

在瀏覽器中

瀏覽器中代碼用 webapck 打包,因此加一個 loader 即可:

然後配置 loader:

在組件中使用:

在 Node.js 中

Node.js 環境下沒有 Webpack,因此讀取 yaml 配置的方法也不一樣。

首先安裝一個 js-yaml 模塊:

然後通過模塊提供的方法獲取:

配置項復用的意思是,對於定義過的配置,在後面的配置直接引用,而不是再寫一遍,從而達到復用的目的。

YAML 中將定義的復用項稱為錨點,用 & 標識;引用錨點則用 * 標識。

對應的 JSON 如下:

但是錨點有個弊端,就是不能作為 變數 在字元串中使用。比如:

此時 key2 的值就是普通字元串 _my name is *name_,引用變得無效了。

其實在實際開發中,字元串中使用變數還是很常見的。比如在復雜的命令中多次使用某個路徑,這個時候這個路徑就應該是一個變數,在多個命令中復用。

GitHub Action 中有這樣的支持,定義一個環境變數,然後在其他的地方復用:

這種實現方式與 webpack 中使用環境變數類似,在構建的時候將變數替換成對應的字元串。

如果本文對你有啟發,請甩手一個贊



Ⅵ 2020-06-15關於iOS 使用yaml配置文件總結

yaml,json,ini這三種格式用來做配置文件優缺點
適合人類編寫:ini > toml > yaml > json > xml > plist
可以存儲的數據復雜度:xml > yaml > toml ~ json ~ plist > ini

yaml解析庫: https://github.com/mirek/YAML.framework

編譯導出iOS版本的framwork, YAML.framework
導入進你的iOS工程,這里有個坑

但是發現雖然不報錯了,但是解析不出數據

里,然後就可以正常使用了

結果

附上yaml格式文件的編寫規則: https://www.jianshu.com/p/5d7cc8690f15

它的基本語法規則如下:

大小寫敏感
使用縮進表示層級關系
縮進時不允許使用Tab鍵,只允許使用空格。
縮進的空格數目不重要,只要相同層級的元素左側對齊即可

純量是最基本的、不可再分的值。以下數據類型都屬於 JavaScript 的純量。

後面引用和正則表達式是一些語法,參 https://blog.csdn.net/michaelhan3/article/details/69664932

Ⅶ 使用yaml文件管理測試數據

知道ddt的基本使用方法之後,練習把之前用excel文件來維護的介面測試用例改用unittest+ddt來實現。

這里我選用yaml文件來管理介面參數,開始本來想用json,但是json無法添加註釋,可讀性不好。

下面截圖是介面文檔中的各個介面,每個介面都有一個固定的序號,所以在設計每個介面的測試數據時,以序號來區分不同介面

yaml文件內容如下,需要注意的是yaml的語法:

(1)鍵值對用冒號分割,但是冒號後需要加一個空格

(2)禁止使用tab縮進,只能使用空格鍵;縮進長度沒有限制,只要元素對齊就表示這些元素屬於一個層級

(3)字元串可以不用引號標注,也可以加引號,如果想把數字變為字元串,加引號即可

(4)使用#表示注釋

詳情可以參考博客: https://blog.csdn.net/vincent_hbl/article/details/75411243

2. 簡單 demo : python 讀取 yaml 文件,取出介面參數

import yaml

fp = open('../dataconfig/信息互動模塊介面.yaml', encoding='utf-8')   #有中文字元的話,加編碼格式

                testdata = yaml.load(fp)

t = testdata['5.2.1.4']

print(t)

(1)封裝讀取yaml文件方法

handle_yaml.py

# coding: utf-8

# author: hmk

importyaml

importos

classHandleYaml:

    def __init__(self,file_path=None):

        if file_path:

           self.file_path = file_path

        else:

            root_dir =os.path.dirname(os.path.abspath('.'))

            # os.path.abspath('.')表示獲取當前文件所在目錄;os.path.dirname表示獲取文件所在父目錄;所以整個就是項目的所在路徑self.file_path = root_dir +'/dataconfig/信息互動模塊介面.yaml'  #獲取文件所在的相對路徑(相對整個項目)

        #elf.data = self.get_data()

    def get_data(self):

        fp =open(self.file_path, encoding='utf-8')

        data =yaml.load(fp)

        return data

if __name__ == '__main__':

    test = HandleYaml()

    p = test.get_data()

    print(p['5.2.1.1'])

[if !vml][endif]

(2)封裝requests請求方法

[if !vml][endif]

# coding: utf-8

# author: Archer

importrequests

importjson

classRunMethod:

    defpost_main(self, url, data, header=None):if header is notNone:

             res =requests.post(url=url, data=data, headers=header)

        else:

            res =requests.post(url=url, data=data)

        # print(res.status_code)

        # return res.json()

        return res    #為了方便後面斷言,這里不再對伺服器響應進行json格式編碼

def get_main(self, url, data=None, header=None):if header is notNone:

            res =requests.get(url=url, params=data, headers=header)

        else:

            res =requests.get(url=url, params=data)

            print(res.status_code)

        # return

res.json()

        return res

    def run_main(self, method, url, data=None, header=None):

    if method== 'POST':

            res =self.post_main(url, data, header)

        else:

            res =self.get_main(url, data, header)

        returnres

        # returnjson.mps(res, indent=2, sort_keys=False, ensure_ascii=False)  #使用json模塊格式化顯示結果

[if !vml][endif]

(3)一個介面測試用例

[if !vml][endif]

# coding: utf-8

# author: Archer

importunittest

importddt

from base.run_method importRunMethod

from utils.handle_yaml importHandleYaml

get_data = HandleYaml()  # 從yaml文件中取出該介面的參數

params = get_data.get_data()['5.2.1.4']

@ddt.ddt

classTest(unittest.TestCase):

    """載入咨詢詳情介面"""

    defsetUp(self):

        self.url ='http://localhost:8088/ApprExclusiveInterface/api/enterprise/info/consult/loadDetail.v'

        self.run =RunMethod()

    @ddt.data(*params)

    deftest(self, value):

        r =self.run.run_main("GET", self.url, value)

        print(r)

       self.assertTrue(value['assert'] inr.text)

if __name__ == '__main__':

    unittest.main()

(4)利用HTMLTestRunner生成測試報告

run_report.py

# coding: utf-8

# author: hmk

from HTMLTestRunner importHTMLTestRunner

importunittest

importtime, os

root_dir = os.path.dirname(os.path.abspath('.'))  # 獲取當前文件所在目錄的父目錄的絕對路徑,也就是項目所在路徑E:\DDT_Interface

case_dir = root_dir + '/test_case/'  # 根據項目所在路徑,找到用例所在的相對項目的路徑

print(root_dir)

print(case_dir)

"""定義discover方法"""

discover = unittest.defaultTestLoader.discover(case_dir,

pattern='test*.py', top_level_dir=None)

"""

1.case_dir即測試用例所在目錄

2.pattern='test_*.py' :表示用例文件名的匹配原則,「*」表示任意多個字元

3.top_level_dir=None:測試模塊的頂層目錄。如果沒頂層目錄(也就是說測試用例不是放在多級目錄中),默認為None

"""

if __name__ == "__main__":

    """直接載入discover"""

    now = time.strftime("%Y-%m-%d%H_%M_%S")

    filename = root_dir +'/report/' + now + '_result.html'  #定義報告存放路徑

    print(filename)

    fp = open(filename,'wb')

    runner =HTMLTestRunner(stream=fp, title='個人網企業網介面測試報告', description='測試結果如下: ')

    runner.run(discover)

    fp.close()

ok ,unittest+ddt進行介面測試就完成了,還有很多不足,yaml配置文件還可以繼續設計優化,例如可以把請求url也加進去。

其實感覺如何設計測試用例,組織測試數據也是一件很有意思的事情,很多事情都必須先有一個良好的設計思路才會進行的更順暢。總之勤於思考,多參考他人的思路。不是有句話嗎,學而不思則罔,思而不學則殆。

Ⅷ YAML 配置文件語言

YAML 是專門用來寫配置文件的語言,非常簡潔和強大,遠比 JSON 格式方便。YAML 語言的設計目標,就是方便人類讀寫。它實質上是一種通用的數據串列化格式。它的基本語法規則如下:

對象的一組鍵值對,使用冒號結構表示

一組連詞線開頭的行,構成一個數組

數據結構的子成員是一個數組,則可以在該項下面縮進一個空格

對象和數組可以結合使用,形成復合結構

純量是最基本的、不可再分的值。以下數據類型都屬於 JavaScript 的純量

課程演示會採用多虛擬機模擬分布式場景,為防止 IP 沖突,無法聯網等問題,需要預先設置好主機名、IP、DNS 配置

修改 cloud.cfg 防止重啟後主機名還原

修改主機名

編輯 vi /etc/netplan/50-cloud-init.yaml 配置文件,修改內容如下

使用 netplan apply 命令讓配置生效

閱讀全文

與yaml配置文件設計相關的資料

熱點內容
文件在桌面怎麼刪除干凈 瀏覽:439
馬蘭士67cd機版本 瀏覽:542
javaweb爬蟲程序 瀏覽:537
word中千位分隔符 瀏覽:392
迷你編程七天任務的地圖怎麼過 瀏覽:844
word2003格式不對 瀏覽:86
百度雲怎麼編輯文件在哪裡 瀏覽:304
起名app數據哪裡來的 瀏覽:888
微信怎麼去泡妞 瀏覽:52
百度廣告html代碼 瀏覽:244
qq瀏覽器轉換完成後的文件在哪裡 瀏覽:623
jsp中的session 瀏覽:621
壓縮完了文件去哪裡找 瀏覽:380
武裝突襲3浩方聯機版本 瀏覽:674
網路機頂盒移動網路 瀏覽:391
iphone手機百度雲怎麼保存到qq 瀏覽:148
資料庫設計與實踐讀後感 瀏覽:112
js對象是什麼 瀏覽:744
網頁文件存pdf 瀏覽:567
文件夾正裝 瀏覽:279

友情鏈接