tokuhirom's Blog

[kotlin] ktor で config を読みたい

前提として、ktor のサンプルコードは、

    embeddedServer(Jetty, 8080, module = Application::module)
            .start()		

のように書かれているものが多いのですが、embeddedServer() を呼んだだけでは設定ファイルは読まれません。

fun main(args: Array<String>) {
    val applicationEnvironment = commandLineEnvironment(args)
    JettyApplicationHost(applicationEnvironment).start()
}

のように commandLineEnvironment を利用するのがよさそうです。

こうすることで、コマンドライン引数もよしなに扱ってくれるようになり、たとえば -port=8080 のように port 番号をコマンドライン引数で指定できるようになります。

で、application.conf を src/main/resources/application.conf に起きます。ktor サーバーの port 番号や、起動時のエントリポイントなどの指定もここでおこなえますし、アプリケーション独自の設定もここに書くことができます。

ktor {
  deployment {
    port = 8080
  }
  application {
    modules = [ com.example.HelloKt.module ]
  }
}



myapp {
  foobar {
    baz = 5963
  }
}

あとは以下のようにすれば設定を読み込み可能です。簡単ですね。

    val baz = environment.config.property("myapp.foobar.baz").getString()
    environment.log.info("baz: $baz")

完全な例はこちらです。 https://github.com/tokuhirom/ktor-samples/tree/master