在一個項目當中,我們經常會有很多不同的環境的參數需要配置,比如
以登錄cookie要寫的domain爲例吧
開發環境的配置:一般是localhost
測試環境:內部解析的測試域名
UAT用戶驗收測試環境:一般是生產環境上解析的一個域名,環境與生產環境基本一致。
生產環境:正式環境,對外運營使用的域名。
每種環境的域名都不一樣,在代碼中,我們如何去選定某個環境應該使用哪個配置文件呢?
下面直接上例子
我們appsetting.js配置文件,是可以設置不同環境下對應的文件的。
比如 我們創建一個MVC項目,默認有appsettings.json和appsettings.Development.json 兩個配置文件
我們也可以按照格式自定義,比如通常生產環境下的配置文件名爲:appsettings.Development.json
它就是以appsettings.XXX.json 爲命名格式即可。XXX就是與我們環境名稱對應的。
比如在生產環境下,我們一般定位爲 appsetttings.Production.json ,其中Production 就是對應我們的環境名稱。
下面是重點,文件跟變量名稱怎麼結合起來呢????
這就涉及到在項目中如何配置環境變量
比如在本機:
vs,項目右鍵--屬性--調試
默認就是Development(開發環境)
那我們經常只在appsetting.json中寫配置而已,爲啥還能正確獲取呢?
這是讀取配置文件的一個機制,當指定的環境沒有這個變量時,就到appsetting.json中讀取,若指定環境的配置文件有對應變量了,它就不會再讀取appsetting.json中的配置了。
也就是一個優先級問題,appsetting.json的優先級最低。在生產環境下也一樣。
那我們爲啥不都直接寫在appsetting.json中就好了呢,其實就是我們上面講的,一個環境對應一個配置文件,部署的時候,我們就不用再次修改配置。
那如果部署在IIS上,我們如何設置IIS對應的環境呢
我們發佈後有個文件web.config,打開
將它修改爲我們想要的環境即可。
同樣的,在linux下我們也可以這麼改。
但一般部署到linux 下,我們會寫入到系統服務,方便自動啓動和利用服務來控制項目啓動、停止以及運行狀態。
linux下的服務命名可以參考我的另一篇文章:https://www.cnblogs.com/fei686868/p/11234609.html
這樣,我們項目中就可以根據環境的情況,定義不同環境下的環境變量。
部署的時候,設置對應的環境名稱,即可自動讀取對應的環境變量了。