文件中的配置
Ktor 允许你配置各种服务器参数,例如主机地址和端口、
对于 EngineMain
,Ktor 从使用 HOCON 或 YAML 格式的配置文件加载其配置。这种方式提供了更大的灵活性来配置服务器,并允许你在不重新编译应用程序的情况下更改配置。此外,你可以从命令行运行应用程序,并通过传递相应的 命令行 实参来覆盖所需的服务器参数。
概述
如果你使用 EngineMain 启动服务器,Ktor 会自动从位于 resources 目录中的名为 application.* 的文件加载配置设置。支持两种配置格式:
HOCON ( application.conf )
YAML ( application.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 私钥的密码。
环境变量
在配置文件中,你可以使用 ${ENV}
/ $ENV
语法将参数替换为环境变量。 例如,你可以通过以下方式将 PORT
环境变量赋值给 ktor.deployment.port
属性:
在这种情况下,环境变量值将用于指定侦听端口。 如果 PORT
环境变量在运行时不存在,你可以按如下方式提供默认端口值:
在代码中读取配置
Ktor 允许你访问配置文件中指定的属性值。 例如,如果你指定了 ktor.deployment.port
属性,...
... 你可以使用 ApplicationEnvironment.config 访问应用程序的配置,并按以下方式获取所需的属性值:
当你将自定义设置保存在配置文件中并需要访问其值时,这尤其有用。
命令行
如果你使用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.environment
值并执行所需操作:
你可以在此处找到完整示例: engine-main-custom-environment 。