Как использовать пользовательскую конфигурацию в Ktor? - PullRequest
0 голосов
/ 22 декабря 2018

Я копаю встроенную поддержку конфигурации и хочу использовать ее (вместо того, чтобы просто катать свою собственную рядом с Ktor'ом), но мне трудно понять, как это сделать чистым способом.У меня есть это, и это работает, но это действительно уродливо, и я чувствую, что должен быть лучший способ:

val myBatisConfig = MyBatisConfig(
        environment.config.property("mybatis.url").getString(),
        environment.config.property("mybatis.driver").getString(),
        environment.config.property("mybatis.poolSize").getString().toInt())

installKoin(listOf(mybatisModule(myBatisConfig), appModule), logger = SLF4JLogger())

Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 31 августа 2019

Вы также можете попробовать это решение:

class MyService(val url: String)

fun KoinApplication.loadMyKoins(environment: ApplicationEnvironment): KoinApplication {
    val myFirstModule = module {
        single { MyService(environment.config.property("mybatis.url").getString()) }
    }
    val mySecondModule = module {}
    return modules(listOf(myFirstModule, mySecondModule))
}

fun Application.main() {
    install(DefaultHeaders)
    install(Koin) {
        loadMyKoins(environment)
        SLF4JLogger()
    }
    routing {
        val service by inject<MyService>()
        get("/") {
            call.respond("Hello world! This is my service url: ${service.url}")
        }
    }
}

fun main(args: Array<String>) {
    embeddedServer(Netty, commandLineEnvironment(args)).start()
}

HTH.

0 голосов
/ 03 февраля 2019

Хорошо, я думаю, у меня есть хороший, чистый способ сделать это сейчас.Хитрость заключается в том, чтобы не беспокоить прохождение самой структуры.Вы можете получить всю свою конфигурацию, как эти классные файлы HOCON, чрезвычайно легко:

val config = ConfigFactory.load()

И затем вы можете самостоятельно пройтись по дереву и построить свои объекты, или использовать проект под названием config4k, который создаст вашМодельные занятия для вас.Итак, моя установка выше добавила больше настроек, но стала намного проще и удобнее в обслуживании:

installKoin(listOf(
            mybatisModule(config.extract("mybatis")),
            zendeskModule(config.extract("zendesk")),
            appModule),
        logger = SLF4JLogger())

Надеюсь, кто-то найдет это полезным!

...