実行
Ktorサーバーアプリケーションを実行する際は、以下の点に注意してください。
- サーバーの作成方法によって、パッケージ化されたKtorアプリケーションの実行時にコマンドライン引数を渡してサーバーパラメータをオーバーライドできるかどうかが決まります。
- EngineMainを使用してサーバーを起動する場合、GradleやMavenのビルドスクリプトでメインクラス名を指定する必要があります。
- サーブレットコンテナ内でアプリケーションを実行するには、特定のサーブレット構成が必要です。
このトピックでは、これらの構成の詳細を確認し、IntelliJ IDEAおよびパッケージ化されたアプリケーションとしてKtorアプリケーションを実行する方法を説明します。
構成の詳細
構成: コード vs 設定ファイル
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オプションを制御できます。
このアプローチとは対照的に、サーブレットコンテナはアプリケーションのライフサイクルと接続設定を制御する必要があります。Ktorは、アプリケーションの制御をサーブレットコンテナに委譲する特別なServletApplicationEngineエンジンを提供しています。アプリケーションの構成方法については、Warプラグインの構成から確認できます。
アプリケーションの実行
開発中にサーバーを再起動すると時間がかかる場合があります。Ktorでは、オートリロードを使用することでこの制限を克服できます。これはコードの変更時にアプリケーションクラスをリロードし、迅速なフィードバックループを提供します。
Gradle/Mavenを使用したアプリケーションの実行
GradleまたはMavenを使用してKtorアプリケーションを実行するには、対応するプラグインを使用します。
- Gradleの場合はApplicationプラグイン。 Nativeサーバーの場合は、Kotlin Multiplatformプラグインを使用します。
- Mavenの場合はExecプラグイン。
IntelliJ IDEAでKtorアプリケーションを実行する方法については、IntelliJ IDEAドキュメントのRun a Ktor applicationセクションを参照してください。
パッケージ化されたアプリケーションの実行
アプリケーションをデプロイする前に、パッケージ化セクションで説明されているいずれかの方法でパッケージ化する必要があります。 生成されたパッケージからKtorアプリケーションを実行する方法はパッケージの種類によって異なり、以下のようになります。
ファットJAR(fat JAR)にパッケージ化されたKtorサーバーを実行し、構成されたポートをオーバーライドするには、次のコマンドを実行します。
Bashjava -jar sample-app.jar -port=8080GradleのApplicationプラグインを使用してパッケージ化されたアプリケーションを実行するには、対応する実行ファイルを実行します。
サーブレットKtorアプリケーションを実行するには、Grettyプラグインの
runタスクを使用します。./gradlew run
