无法使用 Ktor 连接到 postgreSQL 数据库

问题描述 投票:0回答:1

我有一个示例 ktor 应用程序,我想在其中测试 PostgreSQL 连接。找不到我错过的点。 Docker 撰写文件正常,容器已启动。当我在本地运行时出现错误。看来问题出在 application.yml 上,但不确定。

build.gradle

dependencies {
    implementation "io.ktor:ktor-server-core-jvm"
    implementation "io.ktor:ktor-server-netty-jvm"
    implementation "ch.qos.logback:logback-classic:$logback_version"
    implementation "io.ktor:ktor-server-config-yaml"
    testImplementation "io.ktor:ktor-server-tests-jvm"
    testImplementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"

    implementation "org.jetbrains.exposed:exposed-core:0.50.1"
    implementation "org.jetbrains.exposed:exposed-dao:0.50.1"
    implementation "org.jetbrains.exposed:exposed-jdbc:0.50.1"
    implementation "com.zaxxer:HikariCP:4.0.3"
    implementation 'org.postgresql:postgresql:42.1.4'
}

docker-compose.yml

version: '3.7'

services:
  database:
    image: postgres:14-alpine
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_PASSWORD=123456
      - POSTGRES_USER=user
      - POSTGRES_DB=project1
    expose:
      - "5432"

application.yml

ktor:
    application:
        modules:
            - com.activity.ApplicationKt.module
    deployment:
        port: 8080
    database:
        url:
            -jdbc:postgresql://database:5432/project1
        driver:
            -org.postgresql.Driver
        username:
            -user
        password:
            -123456

例外

Exception in thread "main" net.mamoe.yamlkt.YamlDecodingException: Top-level decoder: deserializing nested class for '1' in 'kotlin.collections.LinkedHashMap'
        username:
                ^ at line 12, column 18

    at net.mamoe.yamlkt.internal.YamlUtils__ContextualExceptionKt.contextualDecodingException(ContextualException.kt:165)
    at net.mamoe.yamlkt.internal.YamlUtils.contextualDecodingException(Unknown Source)
    at net.mamoe.yamlkt.internal.YamlDecoder$AbstractDecoder.decodeSerializableElement(YamlDecoder.kt:206)
    at kotlinx.serialization.encoding.CompositeDecoder$DefaultImpls.decodeSerializableElement$default(Decoding.kt:533)
    at kotlinx.serialization.internal.MapLikeSerializer.readElement(CollectionSerializers.kt:111)
    at kotlinx.serialization.internal.MapLikeSerializer.readElement(CollectionSerializers.kt:84)
    at kotlinx.serialization.internal.AbstractCollectionSerializer.readElement$default(CollectionSerializers.kt:51)
    at kotlinx.serialization.internal.AbstractCollectionSerializer.merge(CollectionSerializers.kt:36)
    at kotlinx.serialization.internal.AbstractCollectionSerializer.deserialize(CollectionSerializers.kt:43)
    at net.mamoe.yamlkt.internal.YamlElementMapSerializer.deserialize(YamlElementSerializer.kt)
    at net.mamoe.yamlkt.internal.YamlElementSerializer.deserialize(YamlElementSerializer.kt:40)
    at net.mamoe.yamlkt.internal.YamlElementSerializer.deserialize(YamlElementSerializer.kt:30)
    at net.mamoe.yamlkt.Yaml.decodeFromString(Yaml.kt:162)
    at net.mamoe.yamlkt.Yaml.decodeYamlFromString(Yaml.kt:175)
    at io.ktor.server.config.yaml.YamlConfigJvmKt.configFromString(YamlConfigJvm.kt:36)
    at io.ktor.server.config.yaml.YamlConfigJvmKt.YamlConfig(YamlConfigJvm.kt:25)
    at io.ktor.server.config.yaml.YamlConfigLoader.load(YamlConfig.kt:21)
    at io.ktor.server.config.ConfigLoader$Companion.load(ConfigLoaders.kt:33)
    at io.ktor.server.config.ConfigLoader$Companion.load$default(ConfigLoaders.kt:26)
    at io.ktor.server.engine.CommandLineKt.buildApplicationConfig(CommandLine.kt:112)
    at io.ktor.server.engine.CommandLineKt.buildCommandLineEnvironment(CommandLine.kt:33)
    at io.ktor.server.engine.CommandLineKt.commandLineEnvironment(CommandLine.kt:98)
    at io.ktor.server.netty.EngineMain.main(EngineMain.kt:20)
    at com.activity.ApplicationKt.main(Application.kt:7)
Caused by: net.mamoe.yamlkt.YamlDecodingException: Top-level decoder: deserializing nested class for '5' in 'kotlin.collections.LinkedHashMap'
...          -org.postgresql.Driver
                                  ^ at line 11, column 35

    at net.mamoe.yamlkt.internal.YamlUtils__ContextualExceptionKt.contextualDecodingException(ContextualException.kt:165)
    at net.mamoe.yamlkt.internal.YamlUtils.contextualDecodingException(Unknown Source)
    at net.mamoe.yamlkt.internal.YamlDecoder$AbstractDecoder.decodeSerializableElement(YamlDecoder.kt:206)
    at kotlinx.serialization.encoding.CompositeDecoder$DefaultImpls.decodeSerializableElement$default(Decoding.kt:533)
    at kotlinx.serialization.internal.MapLikeSerializer.readElement(CollectionSerializers.kt:111)
    at kotlinx.serialization.internal.MapLikeSerializer.readElement(CollectionSerializers.kt:84)
    at kotlinx.serialization.internal.AbstractCollectionSerializer.readElement$default(CollectionSerializers.kt:51)
    at kotlinx.serialization.internal.AbstractCollectionSerializer.merge(CollectionSerializers.kt:36)
    at kotlinx.serialization.internal.AbstractCollectionSerializer.deserialize(CollectionSerializers.kt:43)
    at net.mamoe.yamlkt.internal.YamlElementMapSerializer.deserialize(YamlElementSerializer.kt)
    at net.mamoe.yamlkt.internal.YamlElementSerializer.deserialize(YamlElementSerializer.kt:40)
    at net.mamoe.yamlkt.internal.YamlElementSerializer.deserialize(YamlElementSerializer.kt:30)
    at net.mamoe.yamlkt.internal.YamlDecoder$AbstractDecoder.decodeSerializableElement(YamlDecoder.kt:204)
        ... 21 more
    Caused by: net.mamoe.yamlkt.YamlDecodingException: Top-level decoder: deserializing nested class for '1' in 'kotlin.collections.LinkedHashMap'
            driver:
                  ^ at line 10, column 16
.......
postgresql kotlin jdbc docker-compose ktor
1个回答
0
投票

我认为,您的

yaml
键对于数据库连接来说是错误的:

application.yml

ktor:
    application:
        modules:
            - com.activity.ApplicationKt.module
    deployment:
        port: 8080
    database:
        url: "jdbc:postgresql://database:5432/project1"
        driverClass: "org.postgresql.Driver"
        user: "user"
        password: "123456"

您还可以省略列表格式

-
,因为您只有一个值。我已将值更改为普通字符串。

© www.soinside.com 2019 - 2024. All rights reserved.