Vertx JDBC NoSuchMethodError 'java.sql.Connection io.agroal.api.transaction.TransactionIntegration.getConnection()'
Я пытаюсь использовать vertx JDBC с MS SQL Server.
Я получаю следующую трассировку стека:
Exception in thread "vertx-jdbc-service-get-connection-thread" Exception in thread "vertx-jdbc-service-get-connection-thread" java.lang.NoSuchMethodError: 'java.sql.Connection io.agroal.api.transaction.TransactionIntegration.getConnection()'
at io.agroal.pool.ConnectionPool.wrapperFromTransaction(ConnectionPool.java:162)
at io.agroal.pool.ConnectionPool.getConnection(ConnectionPool.java:129)
at io.agroal.pool.DataSource.getConnection(DataSource.java:61)
at io.vertx.ext.jdbc.impl.JDBCClientImpl.lambda$null$4(JDBCClientImpl.java:232)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base/java.lang.Thread.run(Thread.java:831)
java.lang.NoSuchMethodError: 'java.sql.Connection io.agroal.api.transaction.TransactionIntegration.getConnection()'
at io.agroal.pool.ConnectionPool.wrapperFromTransaction(ConnectionPool.java:162)
at io.agroal.pool.ConnectionPool.getConnection(ConnectionPool.java:129)
at io.agroal.pool.DataSource.getConnection(DataSource.java:61)
at io.vertx.ext.jdbc.impl.JDBCClientImpl.lambda$null$4(JDBCClientImpl.java:232)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base/java.lang.Thread.run(Thread.java:831)
часть моей
build.gradle
:
implementation platform("io.vertx:vertx-stack-depchain:4.2.1")
implementation "io.vertx:vertx-core"
implementation 'io.vertx:vertx-jdbc-client:4.2.1'
implementation "io.vertx:vertx-lang-groovy"
implementation 'io.agroal:agroal-api:1.13'
implementation 'io.agroal:agroal-pool:1.13'
implementation "com.microsoft.sqlserver:mssql-jdbc:9.4.0.jre16"
Я пробовал выбирать другие версии, но всегда получаю одну и ту же ошибку. Я попытался найти библиотечную функцию, но не могу найти ни одной версии
TransactionIntegration
с
getConnection()
метод.
Мой код:
import io.vertx.core.AbstractVerticle;
import io.vertx.core.*;
import io.vertx.jdbcclient.JDBCConnectOptions;
import io.vertx.jdbcclient.JDBCPool;
import io.vertx.sqlclient.*;
public class MainVerticle extends AbstractVerticle {
@Override
public void start(Promise<Void> startPromise) throws Exception {
JDBCPool pool = JDBCPool.pool(
vertx,
new JDBCConnectOptions()
.setJdbcUrl("jdbc:sqlserver://some_ip;databaseName=mydatabase")
.setUser("user")
.setPassword("password"),
new PoolOptions().setMaxSize(16)
);
pool
.query("SELECT * FROM test")
.execute()
.onFailure(e -> {
e.printStackTrace();
})
}
}
2 ответа
Текущий выпуск 4.2.1, похоже, основан на agroal 1.12.
Учитывая, что вы получаете
NoSuchMethodError
Я предполагаю, что это может быть связано с тем, что скомпилированный jar был против 1.12, но вы работаете с более старой версией, может быть, 1.0 или 1.1. Глядя на github, вы можете найти эту трассировку, соответствующую этим версиям.
Попробуйте обновиться до 1.12, и это должно решить вашу ошибку.
Судя по всему, gradle просто глючит.
Я изменил версию agroal на 1.12, как предложил Пауло Лопес. Однако это не решило проблему.
Я не знаю, что именно решило это, но я просто перечислю, что именно я сделал:
- удаление обеих агрозависимостей
- вставка agroal-api
- удаление agroal-api
- вставка agroal-api
- вставка агропула
Я не проверял, нужно ли было использовать агроал 1.12, или какой шаг точно решил это. И я не собираюсь его пробовать, я просто счастлив, наконец-то это работает.