У меня есть Java-программа, которая использует платформу Vert.x для асинхронных запросов SQL к базе данных MySQL. Иногда при выполнении запросов Vert.x выдает ParserNotAvailableException.
Я провел некоторое исследование и обнаружил, что это в основном из-за выполнения хранимых процедур. Существует проблема в GitHub, которая говорит о том, что действительно mauricio содержит ошибки, но я не думаю, что разработчики Vert.x все еще имеют эту ошибку. Поэтому я предполагаю, что, возможно, проблема либо в моем коде Java, либо в коде моих хранимых процедур.
public class SqlManager{
private AsyncSQLClient _sqlClient;
public SqlManager(MySqlHelper sqlHelper, SqlSettings settings) {
ConnectionConfig config = new ConnectionConfig(settings.Address, settings.Port,
settings.Database, settings.User, settings.Password);
_sqlClient = sqlHelper.getSqlConnection(config);
}
}
public class MySqlHelper {
private Vertx _vertx;
public MySqlHelper(Vertx vertx) {
_vertx = vertx;
}
public AsyncSQLClient getSqlConnection(ConnectionConfig config) {
AsyncSQLClient sqlClient = MySQLClient.createNonShared(_vertx, config.get());
return sqlClient;
}
}
Итак, я использую только один неиспользуемый клиент SQL для всех моих запросов и предполагаю, что это может быть проблемой. Также после ParserNotAvailableException Vert.x начинает выдавать BufferNotFullyConsumedException для некоторых запросов.
Должен ли я создавать новое соединение каждый раз, когда я делаю запрос, и закрывать соединение после выполнения запроса? Есть ли примеры, как правильно выполнять хранимые процедуры в Vert.x?