檔案中的組態
檔案中的組態
Ktor 允許您配置各種伺服器參數,例如主機位址與連接埠、要載入的
對於 EngineMain,Ktor 會從使用 HOCON 或 YAML 格式的組態檔案中載入其組態。這種方式為配置伺服器提供了更大的靈活性,並允許您在不重新編譯應用程式的情況下更改組態。此外,您可以從命令列執行應用程式,並透過傳遞對應的 命令列 引數來覆寫所需的伺服器參數。
概覽
如果您使用 EngineMain 來啟動伺服器,Ktor 會自動從位於 resources 目錄中名為 application.* 的檔案載入組態設定。支援兩種組態格式:
HOCON ( application.conf )
YAML ( application.yaml )
目前 Maven 型 Ktor 專案不支援 YAML 組態。
組態檔案應至少包含使用 ktor.application.modules 屬性指定的
在這種情況下,Ktor 會呼叫下方 Application.kt 檔案中的 Application.module 函式:
除了要載入的模組外,您還可以配置各種伺服器設定,包括 預定義 (例如連接埠或主機、SSL 設定等)以及自訂設定。 讓我們來看看幾個範例。
SSL 組態
下面的範例使 Ktor 能夠在 8443 SSL 連接埠上進行監聽,並在獨立的 security 區塊中指定所需的
預定義屬性
以下是可以在 組態檔案 中使用的預定義設定清單。
主機位址。
範例 :0.0.0.0
接聽連接埠。您可以將此屬性設為 0 以在隨機連接埠上執行伺服器。
範例 :8080、0
接聽 SSL 連接埠。您可以將此屬性設為 0 以在隨機連接埠上執行伺服器。
範例 :8443、0
NOTE
請注意,SSL 需要額外的選項,列於下方。
用於 自動重新載入 的監看路徑。
範例 :/
關閉 URL。 請注意,此選項使用
伺服器停止接受新請求前的最長時間(以毫秒為單位)。
等待伺服器完全停止的最長時間(以毫秒為單位)。
用於處理應用程式呼叫的執行緒池最小大小。
用於接受新連線並開始呼叫處理的執行緒計數。
用於處理連線、剖析訊息以及執行引擎內部工作的事件群組大小。
如果您已設定 ktor.deployment.sslPort,則需要指定下列
SSL 金鑰庫。
SSL 金鑰庫的別名。
SSL 金鑰庫的密碼。
SSL 私鑰的密碼。
環境變數
在組態檔案中,您可以使用環境變數來替換參數。
- 在 HOCON (application.conf) 中,僅支援
${ENV}語法。 - 在 YAML (application.yaml) 中,支援
${ENV}和$ENV兩種語法。
例如,您可以透過以下方式將 PORT 環境變數指派給 ktor.deployment.port 屬性:
在這種情況下,將使用環境變數值來指定接聽連接埠。 如果 PORT 環境變數在執行時不存在,您可以按如下方式提供預設連接埠值:
在程式碼中讀取組態
Ktor 允許您從應用程式程式碼中存取組態檔案中指定的屬性值。 在以下範例中,您指定了 ktor.deployment.port 屬性:
您可以使用 ApplicationEnvironment.config() 函式存取應用程式的組態並擷取屬性值。使用 .property() 函式存取必要的值,或使用 .propertyOrNull() 存取選填值:
命令列
如果您使用 EngineMain 建立伺服器,您可以從命令列執行
可用的命令列選項列於下方:
JAR 檔案路徑。
自訂組態檔案的路徑,用於替代 resources 中的 application.conf / application.yaml 。
範例 :java -jar sample-app.jar -config=anotherfile.conf
注意 :您可以傳遞多個值。java -jar sample-app.jar -config=config-base.conf -config=config-dev.conf。在這種情況下,所有組態都將合併,且右側組態中的值具有優先權。
主機位址。
接聽連接埠。
用於 自動重新載入 的監看路徑。
接聽 SSL 連接埠。
SSL 金鑰庫。
如果您需要覆寫沒有對應命令列選項的 預定義屬性,請使用 -P 旗標,例如:
您也可以使用 -P 旗標來覆寫 自訂屬性。
範例:使用自訂屬性指定環境
您可以使用自訂組態屬性,根據伺服器執行的環境(例如本機開發或生產環境)來更改應用程式行為。
為此,請在 application.conf 或 application.yaml 中定義自訂屬性,並從 環境變數 中指派其值。在下面的範例中,KTOR_ENV 環境變數被指派給自訂的 ktor.environment 屬性。隨後可以針對本機和生產環境為 KTOR_ENV 設定不同的值。
您可以在執行時透過 在程式碼中讀取組態 來存取 ktor.environment 的值,並執行所需的操作:
如需完整程式碼範例,請參閱 engine-main-custom-environment 。
