在Kotlin的vert.x verticle中创建和访问MongoDB数据库

在Kotlin的vert.x verticle中创建和访问MongoDB数据库,mongodb,kotlin,vert.x,Mongodb,Kotlin,Vert.x,我想通过vert.x创建和访问MongoDB。下面我将介绍如何从vert.x连接和使用MongoDB,但当我尝试使用下面的简单代码时,它会抛出一个错误 import io.vertx.core.Vertx import io.vertx.core.json.JsonObject import io.vertx.ext.mongo.MongoClient fun main() { val vertx = Vertx.vertx() val config = mapOf(Pair(

我想通过vert.x创建和访问MongoDB。下面我将介绍如何从vert.x连接和使用MongoDB,但当我尝试使用下面的简单代码时,它会抛出一个错误

import io.vertx.core.Vertx
import io.vertx.core.json.JsonObject
import io.vertx.ext.mongo.MongoClient

fun main() {
    val vertx = Vertx.vertx()
    val config = mapOf(Pair("db_name", "testDB"), Pair("connection_string", "mongodb://localhost:27017"))
    val mongoClient = MongoClient.create(vertx, JsonObject(config))
    val document = JsonObject().put("title", "The Hobbit")
    mongoClient.save("books", document) { res ->
        if (res.succeeded()) {
        val id: String = res.result()
        println("Saved book with id $id")
        } else {
        res.cause().printStackTrace()
        }
    }
}
上面的代码抛出下面的错误

Jun 17, 2020 2:18:48 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
Jun 17, 2020 2:18:48 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: No server chosen by com.mongodb.async.client.ClientSessionHelper$1@3315d2d7 from cluster description ClusterDescription{type=UNKNOWN, connectionMode=SINGLE, serverDescriptions=[ServerDescription{address=localhost:27017, type=UNKNOWN, state=CONNECTING}]}. Waiting for 30000 ms before timing out
这是我的等级kotlin DSL文件依赖项

dependencies {
    val vertxVersion = "3.9.0"
    implementation(kotlin("stdlib-jdk8"))
    implementation("io.vertx:vertx-lang-kotlin:$vertxVersion")
    implementation("io.vertx:vertx-mongo-client:3.9.0")
}
我已经确认MongoDB正在我的机器上运行


另外,如何使用vert.x MongoClient API创建新的DB?

当我在部署的verticle中访问MongoClient时,上面的代码会起作用。这是我更新的工作代码

import io.vertx.core.AbstractVerticle
import io.vertx.core.Vertx
import io.vertx.core.json.JsonObject
import io.vertx.ext.mongo.MongoClient

internal class BaseVerticle : AbstractVerticle() {
    override fun start() {
        val config = mapOf(Pair("db_name", "mnSet"), Pair("connection_string", "mongodb://localhost:27017"))
        val mongoClient: MongoClient = MongoClient.create(vertx, JsonObject(config))
        val document: JsonObject = JsonObject().put("title", "The Hobbit")
        println("BasicVerticle started")
        mongoClient.save("books", document) { res ->
            if (res.succeeded()) {
                val id: String = res.result()
                println("Saved book with id $id")
            } else {
                res.cause().printStackTrace()
            }
        }
    }
    override fun stop() {
        println("BasicVerticle stopped")
    }
}

fun main() {
    val vertx = Vertx.vertx()
    vertx.deployVerticle(BaseVerticle())
}