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 客户端:无法加载所需的实现的主要内容,如果未能解决你的问题,请参考以下文章

如何从vert.x scala jdbc客户端检索数据库元数据?

JDBC数据库连接

windows 无法启动加载内核所需的DLL文件

LibVLCSharp:“无法加载所需的本机库。”

Vert.x 异步访问数据库 MySQL

无法载入com.mysql.jdbc.Driver驱动程序! 无法连接数据库!