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, или какой шаг точно решил это. И я не собираюсь его пробовать, я просто счастлив, наконец-то это работает.

Другие вопросы по тегам