Vert.x JDBC 客户端:无法加载所需的实现
Posted
技术标签:
【中文标题】Vert.x JDBC 客户端:无法加载所需的实现【英文标题】:Vert.x JDBC client: Could not load the required implementation 【发布时间】:2021-12-24 22:53:01 【问题描述】:我正在尝试使用 vert.x JDBC 客户端连接到数据库:
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")
.setUser("user")
.setPassword("password"),
new PoolOptions().setMaxSize(16)
);
pool
.query("SELECT * FROM test")
.execute()
.onFailure(e ->
System.out.println(e.toString());
)
这给了我结果:
java.sql.SQLException: Could not load the required implementation
我假设这是由第 53 行 here 引起的。
但是,我真的不明白那里的代码在做什么。
完整的堆栈跟踪:
java.sql.SQLException: Could not load the required implementation
at io.agroal.api.AgroalDataSource.from(AgroalDataSource.java:53)
at io.agroal.api.AgroalDataSource.from(AgroalDataSource.java:33)
at io.vertx.jdbcclient.impl.AgroalCPDataSourceProvider.getDataSource(AgroalCPDataSourceProvider.java:73)
at io.vertx.ext.jdbc.impl.JDBCClientImpl.createDataSource(JDBCClientImpl.java:274)
at io.vertx.ext.jdbc.impl.JDBCClientImpl.lambda$getDataSourceHolder$6(JDBCClientImpl.java:256)
at io.vertx.core.impl.ContextImpl.lambda$null$0(ContextImpl.java:160)
at io.vertx.core.impl.AbstractContext.dispatch(AbstractContext.java:96)
at io.vertx.core.impl.ContextImpl.lambda$executeBlocking$1(ContextImpl.java:158)
at io.vertx.core.impl.TaskQueue.run(TaskQueue.java:76)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:831)
Caused by: java.lang.ClassNotFoundException: io.agroal.pool.DataSource
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519)
at io.agroal.api.AgroalDataSource.from(AgroalDataSource.java:49)
... 12 more
【问题讨论】:
请发布异常的完整堆栈跟踪 对不起,如果这个问题很愚蠢,但我怎样才能获得完整的堆栈跟踪?如果我不包含.onFailure()
,它会失败而不会出错。我发布的是上面编写的代码的完整错误。
将System.out.println(e.toString());
替换为e.printStackTrace()
。
您能确定 MS SQL Server JDBC 驱动程序存在于类路径中吗?
@MarkRotteveel:我在问题中添加了 Stacktrace
【参考方案1】:
错误可以通过添加解决
implementation group: 'io.agroal', name: 'agroal-pool', version: '1.0'
到build.gradle
。
【讨论】:
以上是关于Vert.x JDBC 客户端:无法加载所需的实现的主要内容,如果未能解决你的问题,请参考以下文章