Проблемы с подключением к БД Ктор!!! Я просто не понимаю, почему ктор не видит путь application.conf jbdc

У меня проблема с моим веб-проектом. Это мой первый раз, когда я пытаюсь подключить базу данных. Я хочу подключить базу данных, чтобы увидеть, как это работает. Я использую Postgres и настроил базу данных. Я хочу подключиться, используя следующий код:

Data base settings
package com.testreftul

import com.testreftul.model.Orders
import com.testreftul.model.Products
import com.testreftul.model.User
import com.typesafe.config.ConfigFactory
import io.ktor.server.config.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.jetbrains.exposed.sql.Database
import org.jetbrains.exposed.sql.SchemaUtils
import org.jetbrains.exposed.sql.transactions.transaction

object DbSettings {
    private val appConfig = HoconApplicationConfig(ConfigFactory.load())
    private var dbUrl = appConfig.property("jbdc.url").getString()
    private var dbUser = appConfig.property("jbdc.username").getString()
    private var dbPassword = appConfig.property("jbdc.password").getString()

    fun init(dbUrl: String, dbUser: String, dbPassword: String) {
        this.dbUrl = dbUrl
        this.dbUser = dbUser
        this.dbPassword = dbPassword
        pgConnection()
        transaction {
            SchemaUtils.create(User, Products, Orders)
        }
    }

    private fun pgConnection() = Database.connect(
        url = dbUrl,
        driver = "org.postgresql.Driver",
        user = dbUser,
        password = dbPassword
    )
    suspend fun <T> dbQuery(block:()->T): T =
        withContext(Dispatchers.IO){
            transaction {
                block()
            }
        }
}
Database plugin
package com.testreftul.plugins

import com.testreftul.DbSettings
import io.ktor.server.application.*

fun Application.connectDatabase(){
    val url = environment.config.property("jdbc.url").getString()
    val username = environment.config.property("jdbc.username").getString()
    val password = environment.config.property("jdbc.password").getString()

    DbSettings.init(url,username,password)
}
Application.conf
ktor {
    deployment {
        port = 8080
        port = ${?PORT}
    }
    application {
        modules = [ com.testreftul.ApplicationKt.module ]
    }
}

jdbc{
        url =  "jdbc:postgresql://localhost:5432/restest"
        username = "postgres"
        password = "admin"
}
build.gradle.kts
val ktor_version: String by project
val kotlin_version: String by project
val logback_version: String by project
val exposed_version:String by project
val postgresql_jdbc:String by project
plugins {
    application
    kotlin("jvm") version "1.6.20"
    id("org.jetbrains.kotlin.plugin.serialization") version "1.6.20"
}

group = "com.testreftul"
version = "0.0.1"
application {
    mainClass.set("io.ktor.server.netty.EngineMain")

    val isDevelopment: Boolean = project.ext.has("development")
    applicationDefaultJvmArgs = listOf("-Dio.ktor.development=$isDevelopment")
}

repositories {
    mavenCentral()
    maven { url = uri("https://maven.pkg.jetbrains.space/public/p/ktor/eap") }
}

dependencies {
    implementation("io.ktor:ktor-server-core-jvm:$ktor_version")
    implementation("io.ktor:ktor-server-content-negotiation-jvm:$ktor_version")
    implementation("io.ktor:ktor-serialization-kotlinx-json-jvm:$ktor_version")
    implementation("io.ktor:ktor-server-netty-jvm:$ktor_version")
    implementation("ch.qos.logback:logback-classic:$logback_version")

    implementation ("org.jetbrains.exposed:exposed-core:$exposed_version")
    implementation ("org.jetbrains.exposed:exposed-dao:$exposed_version")
    implementation ("org.jetbrains.exposed:exposed-jdbc:$exposed_version")
    implementation ("org.jetbrains.exposed:exposed-java-time:$exposed_version")
    implementation ("org.postgresql:postgresql:$postgresql_jdbc")

    testImplementation("io.ktor:ktor-server-tests-jvm:$ktor_version")
    testImplementation("org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version")


}
gradle.properties
ktor_version=2.0.0-beta-1
kotlin_version=1.6.20
logback_version=1.2.3
kotlin.code.style=official

exposed_version=0.37.3
postgresql_jdbc=42.3.3
Application.kt

package com.testreftul

import io.ktor.server.application.*
import com.testreftul.plugins.*

fun main(args: Array<String>): Unit =
    io.ktor.server.netty.EngineMain.main(args)

@Suppress("unused") // application.conf references the main function. This annotation prevents the IDE from marking it as unused.
fun Application.module() {
    connectDatabase()
    configureRouting()
    configureSerialization()
}

Я установил все необходимые плагины и создал базу данных, а также настроил свою идею и подключился к базе данных с помощью диалекта postgres. Когда я запускаю консоль, возвращаюсь. Причина: io.ktor.server.config. не найден.

> Task :run FAILED
2022-04-06 01:55:22.805 [main] TRACE Application - {
    # application.conf @ file:/C:/Users/eljan/IdeaProjects/ktor-restful1/build/resources/main/application.conf: 6
    "application" : {
        # application.conf @ file:/C:/Users/eljan/IdeaProjects/ktor-restful1/build/resources/main/application.conf: 7
        "modules" : [
            # application.conf @ file:/C:/Users/eljan/IdeaProjects/ktor-restful1/build/resources/main/application.conf: 7
            "com.testreftul.ApplicationKt.module"
        ]
    },
    # application.conf @ file:/C:/Users/eljan/IdeaProjects/ktor-restful1/build/resources/main/application.conf: 2
    "deployment" : {
        # application.conf @ file:/C:/Users/eljan/IdeaProjects/ktor-restful1/build/resources/main/application.conf: 3
        "port" : 8080
    },
    # Content hidden
    "security" : "***"
}

2022-04-06 01:55:22.976 [main] INFO  Application - Autoreload is disabled because the development mode is off.
Exception in thread "main" java.lang.ExceptionInInitializerError
    at com.testreftul.plugins.DatabaseKt.connectDatabase(Database.kt:11)
    at com.testreftul.ApplicationKt.module(Application.kt:11)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at kotlin.reflect.jvm.internal.calls.CallerImpl$Method.callMethod(CallerImpl.kt:97)
    at kotlin.reflect.jvm.internal.calls.CallerImpl$Method$Static.call(CallerImpl.kt:106)
    at kotlin.reflect.jvm.internal.KCallableImpl.call(KCallableImpl.kt:108)
    at kotlin.reflect.jvm.internal.KCallableImpl.callDefaultMethod$kotlin_reflection(KCallableImpl.kt:159)
    at kotlin.reflect.jvm.internal.KCallableImpl.callBy(KCallableImpl.kt:112)
    at io.ktor.server.engine.internal.CallableUtilsKt.callFunctionWithInjection(CallableUtils.kt:119)
    at io.ktor.server.engine.internal.CallableUtilsKt.executeModuleFunction(CallableUtils.kt:36)
    at io.ktor.server.engine.ApplicationEngineEnvironmentReloading$launchModuleByName$1.invoke(ApplicationEngineEnvironmentReloading.kt:333)
    at io.ktor.server.engine.ApplicationEngineEnvironmentReloading$launchModuleByName$1.invoke(ApplicationEngineEnvironmentReloading.kt:332)
    at io.ktor.server.engine.ApplicationEngineEnvironmentReloading.avoidingDoubleStartupFor(ApplicationEngineEnvironmentReloading.kt:357)
    at io.ktor.server.engine.ApplicationEngineEnvironmentReloading.launchModuleByName(ApplicationEngineEnvironmentReloading.kt:332)
    at io.ktor.server.engine.ApplicationEngineEnvironmentReloading.access$launchModuleByName(ApplicationEngineEnvironmentReloading.kt:32)
    at io.ktor.server.engine.ApplicationEngineEnvironmentReloading$instantiateAndConfigureApplication$1.invoke(ApplicationEngineEnvironmentReloading.kt:313)
    at io.ktor.server.engine.ApplicationEngineEnvironmentReloading$instantiateAndConfigureApplication$1.invoke(ApplicationEngineEnvironmentReloading.kt:311)
    at io.ktor.server.engine.ApplicationEngineEnvironmentReloading.avoidingDoubleStartup(ApplicationEngineEnvironmentReloading.kt:339)
    at io.ktor.server.engine.ApplicationEngineEnvironmentReloading.instantiateAndConfigureApplication(ApplicationEngineEnvironmentReloading.kt:311)
    at io.ktor.server.engine.ApplicationEngineEnvironmentReloading.createApplication(ApplicationEngineEnvironmentReloading.kt:144)
    at io.ktor.server.engine.ApplicationEngineEnvironmentReloading.start(ApplicationEngineEnvironmentReloading.kt:278)
    at io.ktor.server.netty.NettyApplicationEngine.start(NettyApplicationEngine.kt:183)
    at io.ktor.server.netty.EngineMain.main(EngineMain.kt:26)
Caused by: io.ktor.server.config.ApplicationConfigurationException: Property jbdc.url not found.
    at io.ktor.server.config.HoconApplicationConfig.property(HoconApplicationConfig.kt:15)
    at com.testreftul.DbSettings.<clinit>(DbSettings.kt:16)
    ... 26 more
Caused by: io.ktor.server.config.ApplicationConfigurationException: Property jbdc.url not found.


Execution failed for task ':run'.
> Process 'command 'C:\Users\eljan\.jdks\corretto-16.0.2\bin\java.exe'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас есть опечатка в именах свойств конфигурации в определении значений по умолчанию для частных переменных. Это должно быть jdbc вместо jбдc:

private var dbUrl = appConfig.property("jbdc.url").getString()
private var dbUser = appConfig.property("jbdc.username").getString()
private var dbPassword = appConfig.property("jbdc.password").getString()

Другие вопросы по теме