(三)Beego框架之引數配置
beego 預設使用了 INI 格式解析配置檔案,通常在專案中會存在很多系統引數、業務引數配置,這些引數通常都是通過配置檔案進行配置,而且不是寫死在程式碼裡面。
提示:例如mysql賬號密碼之類的系統引數,如果寫死在程式碼裡面,每次修改引數都得重新打包升級,非常不靈活。
提示:修改配置檔案後,需要重啟應用,配置才生效,即使使用bee run執行專案也得重啟。
一、beego系統引數
我先介紹下beego自帶的系統引數有哪些?預設情況,conf/app.conf就是我們的預設配置檔案。
例子:
# 這是註釋 #應用名稱 appname = tizi356 #http 服務埠 httpport = 8080 #執行模式,常用的執行模式有dev, test, prod runmode = dev
下面表格是beego常用配置:
提示: 引數名不區分大小寫, 下面的引數配置,瞭解下即可,需要的時候再查。
引數名 | 預設值 | 說明 |
---|---|---|
AppName | beego | 應用名 |
RunMode | dev | 程式執行模式,常用模式有dev、test、prod,一般用於區分不同的執行環境 |
RouterCaseSensitive | true | 是否路由忽略大小寫匹配 |
ServerName | beego | beego 伺服器預設在請求的時候輸出 server 頭的值。 |
RecoverPanic | true | 是否異常恢復,預設值為 true,即當應用出現異常的情況,通過 recover 恢復回來,而不會導致應用異常退出。 |
EnableGzip | false | 是否開啟 gzip 支援 |
MaxMemory | 64M | 檔案上傳預設記憶體快取大小,單位是位元組 |
AutoRender | true | 是否模板自動渲染,對於 API 型別的應用,應用需要把該選項設定為 false,不需要渲染模板。 |
StaticDir | static | 靜態檔案目錄設定 |
ViewsPath | views | 模板路徑 |
Graceful | false | 是否開啟熱升級,預設是 false,關閉熱升級。 |
ServerTimeOut | 0 | 設定 HTTP 的超時時間,預設是 0,不超時。 |
HTTPAddr | 應用監聽地址,預設為空,監聽所有的網絡卡 IP。 | |
HTTPPort | 8080 | 應用監聽埠 |
EnableHTTPS | false | 是否啟用 HTTPS,預設是 false 關閉。當需要啟用時,先設定 EnableHTTPS = true,並設定 HTTPSCertFile 和 HTTPSKeyFile |
HTTPSAddr | https應用監聽地址,預設為空,監聽所有的網絡卡 IP。 | |
HTTPSPort | 10443 | https應用監聽埠 |
HTTPSCertFile | 開啟 HTTPS 後,ssl 證書路徑 | |
HTTPSKeyFile | 開啟 HTTPS 之後,SSL 證書 keyfile 的路徑。 | |
EnableAdmin | false | 是否開啟程序內監控模組,預設 false 關閉。 |
AdminAddr | localhost | 監控程式監聽的地址。 |
AdminPort | 8088 | 監控程式監聽的地址。 |
SessionOn | false | session 是否開啟 |
SessionProvider | memory | session 的引擎, 詳情參考session章節的教程 |
SessionName | beegosessionID | 存在客戶端的 cookie 名稱。 |
SessionGCMaxLifetime | 3600 | session 過期時間, 單位秒。 |
SessionProviderConfig | 配置資訊,根據不同的session引擎設定不同的配置資訊,詳細的配置請參考session章節的教程 | |
SessionCookieLifeTime | 3600 | session 預設存在客戶端的 cookie 的時間, 單位秒。 |
SessionDomain | session cookie 儲存域名。 |
二、自定義引數
除了beego系統自帶的配置,我們也可以自定義配置,然後通過beego.AppConfig物件的函式讀取配置。
例子:
我們在app.conf增加下面自定義配置
# 下面是關於mysql資料庫的配置引數
mysql_user = "root"
mysql_password = "123456"
mysql_host = "127.0.0.1:3306"
mysql_dbname = "tizi365"
下面是讀取配置程式碼:
web.AppConfig.String("mysql_user")
web.AppConfig.String("mysql_password")
web.AppConfig.String("mysql_host")
web.AppConfig.String("mysql_dbname")
beego.AppConfig物件,為我們定義了一些常用的函式,用於讀取配置,下面列出一些常用的函式:
函式名 | 說明 |
---|---|
String | 以字串的方式返回引數 |
Int | 以int型別的方式返回引數 |
Int64 | 以Int64型別的方式返回引數 |
Bool | 以Bool型別的方式返回引數 |
Float | 以Float型別的方式返回引數 |
提示:以上函式,只有一個引數,就是配置的名字
如果配置項的引數為空,希望返回預設值,可以使用下面的函式:
函式名 | 說明 |
---|---|
DefaultString | 以字串的方式返回引數 |
DefaultInt | 以int型別的方式返回引數 |
DefaultInt64 | 以Int64型別的方式返回引數 |
DefaultBool | 以Bool型別的方式返回引數 |
DefaultFloat | 以Float型別的方式返回引數 |
提示: 以上函式,只有兩個引數,第一個引數是配置項名字,第二個引數是預設值
例子:
// 如果mysql_port配置項的引數為空,則返回3306
web.AppConfig.DefaultInt("mysql_port", 3306)
三、不同執行級別的引數
前面提到runmode引數可以設定不同的執行級別,我們一般用來區分不用的執行環境,例如: dev、test等等。
如果我們希望資料庫配置在不同環境,賬號密碼都不一樣,可以使用如下配置方式:
例子:
# 配置執行級別
runmode ="dev"
[dev]
mysql_user = "root"
mysql_password = "123456"
mysql_host = "127.0.0.1:3306"
mysql_dbname = "tizi365"
[test]
mysql_user = "root"
mysql_password = "Ihd9ay86asgk"
mysql_host = "61.99.21.1:3306"
mysql_dbname = "tizi365"
[prod]
mysql_user = "root"
mysql_password = "8hlabdias986"
mysql_host = "202.12.91.1:3306"
mysql_dbname = "tizi365"
上面的例子,我們為dev,test,prod三個環境配置了不同的資料庫引數,當我們通過web.AppConfig讀取引數的時候,由runmode決定讀取那個環境的引數。 例如:當runmode=test, mysql_password=Ihd9ay86asgk
四、使用多個配置檔案
在實際專案中,我們一般都使用多個配置檔案管理配置,多個配置檔案也方便我們模組化管理配置。
例如: 我們新建一個mysql.conf配置檔案,儲存資料庫配置。
檔案: conf/mysql.conf
[dev]
mysql_user = "root"
mysql_password = "123456"
mysql_host = "127.0.0.1:3306"
mysql_dbname = "tizi365"
然後我們在conf/app.conf主配置檔案中,通過include 將mysql配置檔案包含進去。
AppName = tizi356
HttpPort = 8080
runmode = dev
# 包含mysql配置
include "mysql.conf"
這種通過include包含其他配置檔案的方式,跟把所有配置都寫在一個配置檔案的效果是一樣的, 區別就是使用多個配置檔案,各個模組的配置更加清晰。
五、支援環境便里昂配置
到目前為止,我們的配置引數都是通過ini配置檔案進行配置,如果想通過環境變數進行配置怎麼辦?尤其是在docker容器環境執行,通常都需要通過環境變數配置應用引數。
beego支援優先從環境變數中讀取引數, 只要在ini配置檔案中通過 ${環境變數名},定義配置項的值。
例子:
runmode = "${APP_RUN_MODE || dev}"
httpport = "${APP_PORT || 9090}"
上面例子的意思就是:
如果環境變數APP_RUN_MODE值不為空,runmode配置的引數就等於APP_RUN_MODE環境變數的值,如果為空,則使用dev作為預設引數。 同理APP_PORT為空,則使用9090作為預設值,否則使用APP_PORT的值。