データベースに接続し、定期的にテーブルをポーリングしてオブジェクトをイベント バスに送信する必要がある非常に小さな Verticle を取得しました。これまでのところ、データベースに接続できますが、その後ハンドラーが実行されず、ポーリング タイマーが開始されません。それは明らかなことであり、あらゆる助けに感謝しています。
Futuresは非推奨であるため、Vert.x 3.8 Promisesを使用します(そのリンクの背後にある例のように)。私のコードでわかるように、非推奨の 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
}
}