ApplicationConfig を使って Production と Debug 環境で設定を切り替える。
前回からの変更点 Application.kt:
@@ -5,6 +5,7 @@
import io.ktor.server.application.install
import io.ktor.server.plugins.contentnegotiation.ContentNegotiation
import io.ktor.http.ContentType
+import io.ktor.server.config.ApplicationConfigValue
import io.ktor.server.request.receive
import io.ktor.server.response.respond
import io.ktor.server.routing.Routing
@@ -18,6 +19,9 @@
data class Pokemon(val id: Int, val name: String)
fun Application.main() {
+ val appConfig: ApplicationConfigValue? = environment.config.propertyOrNull("app.debug")
+ println("debug = ${appConfig?.getString()?.toBoolean()?:false}")
+
val defaultPokemon = Pokemon(0, "Pikachu")
val pokemonStorage = mutableListOf<Pokemon>()
切り替えるといってもここでは app.debug が false か true か どちらの設定になっているかを標準出力するだけ。
そして ./app/src/main/resources/debug.conf を用意:
ktor {
deployment {
port = 8080
}
application {
modules = [ org.example.ApplicationKt.main ]
}
}
app {
debug = true
}
./app/src/main/resources/application.conf をコピーして app ブロックを書き足しただけです。
まず、普通に実行して debug = false と標準出力することを確かめます。
$ ./gradlew buildFatJar
$ java -jar app/build/libs/fat.jar
debug = false
false になりました。 何も指定しなければ、./app/src/main/resources/application.conf が使用されるらしいです(要確認)。
それでは、debug.conf を指して実行します。
$ java -jar app/build/libs/fat.jar -config=app/src/main/resources/debug.conf
debug = true
true になりました。
fatJar をつくらないで、 ./gradlew run で確認することもできます。 その場合注意すべきは debug.conf へ至る相対パスの指定方法です。 今はアプリのビルドファイルが ./app/build.gradle.kt に配置されているので、 ./app を基準にして、そこから相対パスで指定する。
つまり、次のようになります。
$ ./gradlew run --args="-config=src/main/resources/debug.conf"
なお、もし debug.conf ファイルをプロジェクトルートに配置した場合は:
$ cp ./app/src/main/resources/debug.conf debug.conf
$ ./gradlew run --args="-config=debug.conf"
のように指定します。
このときは ./app からの相対パスで指定するわけではない! 面倒くさい。
最後に現状のディレクトリ構成を確認:
.
├── app
│ ├── build.gradle.kts
│ └── src
│ └── main
│ ├── kotlin
│ │ └── Application.kt
│ └── resources
│ ├── application.conf
│ └── debug.conf
├── gradle
│ ├── libs.versions.toml
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
└── settings.gradle.kts
以上です。