检查 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");
我是 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");