項目引入yaml語言來寫配置文件,最近發現利用其錨點&和引用*的功能,可以極大減少配置文件中的重復內容,將相同配置內容收斂到錨點處,修改時,只需要修改錨點處的內容,即可在所有引用處生效。
yaml基礎參考自阮老師的blog: http://www.ruanyifeng.com/blog/2016/07/yaml.html?f=tt
具體練習也是使用阮老師推薦的http://nodeca.github.io/js-yaml/
舉例,在server對redis的訪問配置中,針對不同的db可能會寫成如下配置:
user:
host: 127.0.0.1
db: 8
book:
host: 127.0.0.1
db: 9
comment:
host: 127.0.0.1
db: 10
此處host其實配置都是一樣的,只有db不一樣,通過錨點和引用的功能,可以寫成如下:
localhost: &localhost1 host: 127.0.0.1 user: <<: *localhost1 db: 8 book: <<: *localhost1 db: 9 comment: <<: *localhost1 db: 10
其中&表示將localhost1作為localhost的別名,*標識取別名localhost1對應的value,<<表示將*localhost1代表的map合並入當前map數據。
針對遠端服務多台機器的訪問配置,針對不同情況可能存在不同的優先級訪問順序,可以寫成如下形式:
server_order_0: - - 127.0.0.1 - 8050 - - 10.0.1.1 - 8050 - - 10.0.2.1 - 8050 server_order_1: - - 10.0.1.1 - 8050 - - 127.0.0.1 - 8050 - - 10.0.2.1 - 8050 server_order_2: - - 10.0.2.1 - 8050 - - 10.0.1.1 - 8050 - - 127.0.0.1 - 8050
利用錨點和引用,可以寫為下面的配置:
server0: &server0 - 127.0.0.1 - 8050 server1: &server1 - 10.0.1.1 - 8050 server2: &server2 - 10.0.2.1 - 8050 server_order_0: - *server0 - *server1 - *server2 server_order_1: - *server1 - *server0 - *server2 server_order_2: - *server2 - *server1 - *server0