1. 程式人生 > 其它 >(三)Beego框架之引數配置

(三)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的值。