0

我有一个非常小的 Verticle,它应该连接到数据库并定期轮询表并将对象发送到事件总线。到目前为止,我可以连接到数据库,但是之后的处理程序没有被执行,我的轮询计时器也没有启动。我想这是显而易见的,感谢每一个帮助。

我使用 Vert.x 3.8 Promises ,因为 Future 已被弃用(就像在该链接后面的示例中一样)。正如您在我的代码中看到的,使用不推荐使用的 Futures工作得很好!但是谁想要使用已弃用的代码,呵呵?要么我做错了什么,要么这是 Vert.x 中的错误,我不认为。

我的 Vert.x 是 3.8.1

class JdbcVerticle extends AbstractVerticle {

    private SQLConnection connection

    @Override
    void start(Promise<Void> startPromise) {
        def jdbcParams = config().getJsonObject('connection')
        // This gets executed:
        testFuture().handler = { println "Test Future handler runs!" }

        // This is never executed :-(
        connect(jdbcParams).handler = { println "Connected..." }
    }

    Future<Void> connect(JsonObject jdbcParams) {
        def promise = Promise.<Void>promise()
        def client = JDBCClient.createShared(vertx, jdbcParams)

        client.getConnection() { connection ->
            if(connection.failed()) {
                promise.fail(connection.cause())
            } else {
                this.connection = connection.result()
                promise.complete()
            }
        }

        return promise.future()
    }

    Future<Void> testFuture() {
        def future = Future.<Void>future()
        vertx.setTimer(200) { future.complete() }
        return future
    }
}
4

0 回答 0