![](/img/trans.png)
[英]Casting java.sql.Connection to com.mysql.jdbc.Connection
[英]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"
我尝试选择其他版本,但总是出现相同的错误。 我尝试寻找库函数,但找不到任何带有getConnection()
方法的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();
})
}
}
当前的 4.2.1 版本似乎依赖于 agroal 1.12。
鉴于您收到NoSuchMethodError
我认为这可能与编译的 jar 是针对 1.12 的事实有关,但是您针对的是 1.13 并且在两者之间更改了一些农业类?
尝试降级到 1.12,它应该可以解决您的错误。
显然,gradle 只是被窃听了。
我按照 Paulo Lopes 的建议将 agroal 版本更改为 1.12。 然而,这并没有解决问题。
我不知道究竟是什么解决了它,但我会列出我所做的:
没查过agroal 1.12有没有必要用,具体是哪个步骤解决的。 我不打算尝试,我只是很高兴,它终于奏效了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.