检查 Vert.x MySQL 池是否已初始化

Check if Vert.x MySQL Pool initialized

我是 Vert.x 的新手,我想使用它的 MySQL 池。

这是我的设置:

MySQLConnectOptions connectOptions = new MySQLConnectOptions()
        .setHost(hostname)
        .setPort(port)
        .setDatabase(dbname)
        .setUser(user)
        .setPassword(password)
        .setCachePreparedStatements(true)
        .setPreparedStatementCacheMaxSize(250)
        .setPreparedStatementCacheSqlLimit(2048)
        .setReconnectAttempts(1)
        .setReconnectInterval(10);

PoolOptions poolOptions = new PoolOptions().setMaxSize(5);

pool = MySQLPool.pool(vertx, connectOptions, poolOptions);

pool.connectHandler(handler -> {
    Future<Transaction> begin = handler.begin();
    if (begin.failed()) {
        logger.info("Failed initializing pool");
    }
});

当数据库为 运行 时,一切正常,但当数据库处于离线状态时,我没有收到任何通知并且 Verticles 保持 运行。

我有以下功能:

    public static void createTable(final String table) {
        pool.query("CREATE TABLE IF NOT EXISTS " + table + "(Id BIGINT PRIMARY KEY, Lat double(8,5), Lon double(8,5));")
                .execute(res -> {
                    if (res.succeeded()) {
                        logger.info("Created table " + table);
                    } else {
                        logger.error("Failed creating table: " + res.cause().getMessage());
                    }
                });
    }

这会在池初始化后立即调用。 45 秒后记录器输出打印,连接超时。 (为什么在 connectOptions 中指定的甚至是 45 秒和 10ms?)

所以我的问题是:是否可以检查池是否成功初始化并对结果做出反应?

您使用 connectHandler 的理由似乎有误。应该调用此方法来设置 post-connection 挂钩,而不是验证数据库是否已启动。

当您创建池时,在您尝试进行查询之前什么也不会发生。所以在池创建之后,立即调用 createTable

MySQLConnectOptions connectOptions = new MySQLConnectOptions()
        .setHost(hostname)
        .setPort(port)
        .setDatabase(dbname)
        .setUser(user)
        .setPassword(password)
        .setCachePreparedStatements(true)
        .setPreparedStatementCacheMaxSize(250)
        .setPreparedStatementCacheSqlLimit(2048)
        .setReconnectAttempts(1)
        .setReconnectInterval(10);

PoolOptions poolOptions = new PoolOptions().setMaxSize(5);

pool = MySQLPool.pool(vertx, connectOptions, poolOptions);

createTable("my_table");