运行
运行 Ktor 服务器应用程序时,请注意以下细节:
- 创建服务器的方式会影响在运行已打包的 Ktor 应用程序时,是否可以通过传递命令行参数来覆盖服务器参数。
- 在使用 EngineMain 启动服务器时,Gradle/Maven 构建脚本应指定主类名。
- 在 Servlet 容器中运行应用程序需要特定的 Servlet 配置。
在本主题中,我们将查看这些配置细节,并向您展示如何在 IntelliJ IDEA 中以及作为已打包的应用程序运行 Ktor 应用程序。
配置细节
配置:代码与配置文件
运行 Ktor 应用程序取决于您创建服务器的方式 —— embeddedServer 或 EngineMain:
- 对于
embeddedServer,服务器参数(例如主机地址和端口)是在代码中配置的,因此在运行应用程序时无法更改这些参数。 - 对于
EngineMain,Ktor 从使用HOCON或YAML格式的外部文件加载配置。使用这种方法,您可以从命令行运行已打包的应用程序,并通过传递相应的命令行参数来覆盖所需的服务器参数。
启动 EngineMain:Gradle 与 Maven 细节
如果您使用 EngineMain 创建服务器,则需要指定 main 函数,以便使用所需的引擎启动服务器。 下面的示例演示了用于运行带 Netty 引擎的服务器的 main 函数:
fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args)要在不于 main 函数内部配置引擎的情况下使用 Gradle/Maven 运行 Ktor 服务器,您需要在构建脚本中指定主类名,如下所示:
application {
mainClass.set("io.ktor.server.netty.EngineMain")
}mainClassName = "io.ktor.server.netty.EngineMain"<properties>
<main.class>io.ktor.server.netty.EngineMain</main.class>
</properties>WAR 细节
Ktor 允许您直接在应用程序中使用所需的引擎(例如 Netty、Jetty 或 Tomcat)创建并启动服务器。在这种情况下,您的应用程序可以控制引擎设置、连接和 SSL 选项。
与此方法相反,Servlet 容器应控制应用程序生命周期和连接设置。Ktor 提供了一个特殊的 ServletApplicationEngine 引擎,它将应用程序的控制权委托给 Servlet 容器。您可以从配置 War 插件中了解如何配置您的应用程序。
运行应用程序
在开发过程中重启服务器可能需要一些时间。Ktor 允许您通过使用自动重载来克服这一限制,它会在代码更改时重新加载应用程序类,并提供快速反馈循环。
使用 Gradle/Maven 运行应用程序
要使用 Gradle 或 Maven 运行 Ktor 应用程序,请使用相应的插件:
- 用于 Gradle 的 Application 插件。对于 Native 服务器,请使用 Kotlin Multiplatform 插件。
- 用于 Maven 的 Exec 插件。
要了解如何在 IntelliJ IDEA 中运行 Ktor 应用程序,请参阅 IntelliJ IDEA 文档中的运行 Ktor 应用程序部分。
运行已打包的应用程序
在部署应用程序之前,您需要以 打包 部分中描述的其中一种方式对其进行打包。 从生成的软件包运行 Ktor 应用程序取决于软件包类型,可能如下所示:
要运行打包在 fat JAR 中的 Ktor 服务器并覆盖配置的端口,请执行以下命令:
Bashjava -jar sample-app.jar -port=8080要运行使用 Gradle Application 插件打包的应用程序,请运行相应的可执行文件:
要运行 Servlet Ktor 应用程序,请使用 Gretty 插件的
run任务。
