有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Vertx JDBC NoSuchMethodError’java。sql。连接io。农业的。应用程序编程接口。交易交易整合。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"

我试着选择其他版本,但总是出现同样的错误。我试图寻找库函数,但用getConnection()方法找不到any versionof TransactionIntegration

我的代码:

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) 个答案

  1. # 1 楼答案

    显然gradle被窃听了

    按照保罗·洛佩斯的建议,我将农业版改为1.12。然而,这并没有解决问题

    我不知道,到底是什么解决了这个问题,但我只列出我所做的:

    • 消除两种农业依赖
    • 插入农业原料药
    • 去除农业原料药
    • 插入农业原料药
    • 插入农业池

    我没有检查是否有必要使用Agrol 1.12,也没有检查到底是哪一步解决了这个问题。我不打算尝试,我只是很高兴,它终于起作用了

  2. # 2 楼答案

    目前的4.2.1版本似乎依赖于Agrol 1.12

    考虑到你得到了一个NoSuchMethodError,我认为这可能与编译后的jar是针对1.12的事实有关,但你运行的是旧版本,可能是1.0或1.1。查看github,您可以找到与这些版本匹配的跟踪

    尝试升级到1.12,它会解决你的错误