当前位置: 首页 > 知识库问答 >
问题:

ClassNotFoundException使用带有本地类和Debezium引擎的QuarkusClassLoader

朱宏爽
2023-03-14
ClassLoader classLoader = QuarkusClassLoader.getSystemClassLoader();
String str = "com.mycompany.service.SomeClass";
try {
  Class<? extends SomeClass> someClass =
      (Class<? extends SomeClass>) classLoader.loadClass(str);
} catch (Throwable e) {
  e.printStackTrace();
}

我试图弄清楚为什么我得到了java.lang.ClassNotFoundException当我尝试加载com.mycompany.service.某个类。这个类是在项目中本地定义的,当我启动我的Quarkus应用程序(mvn编译Quarkus: dev)时,我得到了这个错误。如果我使用另一个类加载器(即this.getClass(). getClassLoader()),这个错误不会发生。它似乎只发生在QuarkusClassLoader

编辑:我认为问题最终与Debezium引擎初始化有关。调用以下行时引发了该异常

// Create the engine with this configuration ...
engine =
    DebeziumEngine.create(Json.class)
        .using(props)
        .notifying(this::handleDbChangeEvent)
        .build();

看看我的回答我是怎么解决的

共有2个答案

戚俊美
2023-03-14

我通过传递线程解决了这个问题。currentThread()。引擎初始化中的getContextClassLoader()

engine =
    DebeziumEngine.create(Json.class)
        // Have to pass the current class loader to avoid ClassNotFoundException
        .using(Thread.currentThread().getContextClassLoader())
        .using(props)
        .notifying(this::handleDbChangeEvent)
        .build();
禹昊穹
2023-03-14

使用Classloader.getSystemClassLoader当然不是正确的做法,因为在开发模式下(更一般地说,你很少会想在Java代码中这样做),Quarkus dot不是一个扁平的类加载器结构,而是一个分层的结构。

有关开发模式下的类加载如何工作的更多详细信息,请参阅https://quarkus.io/guides/class-loading-reference。

您可以使用以下方法强制jar的所有类由系统类加载器而不是Quarkus类加载器加载:

夸克斯。类加载。父第一工件=stax:stax api

在这里,您基本上配置了应该由系统类加载器加载的jar的groupId和artifactId

 类似资料:
  • 问题内容: 我得到一个异常每当我试图让从上下文参数到一个班级,我真的有困难的时候理解为什么它不工作,这里的中的Apache Tomcat 7.0.11日志除外: 这是我的web.xml的一部分: 这是我的ServletContextListener.java: 问题答案: 尝试清除tomcat工作目录并清理。之后,发布您的项目并再次运行。

  • 我想使用Debezium嵌入式引擎和AWS Kinesis来加载PostgreSQL数据库的初始快照,然后连续执行CDC。 我知道,有了Kafka Connect,为了检查事务边界,我将有一个现成的事务元数据主题。 如果使用相同的Debezium嵌入式引擎和AWS Kinesis(https://Debezium.io/blog/2018/08/30/streaming-mysql-data-ch

  • 引擎配置 支持的数据库 数据库URL 《PostgreSQL》 MySQL 甲骨文公司 Microsoft SQL服务器 SQLite 其他 引擎创建API 池化 自定义DBAPI connect()参数/on connect例程 传递给的特殊关键字参数数据库接口() 控制如何将参数传递给DBAPI connect()函数 在连接后修改DBAPI连接,或在连接后运行命令 完全替换DBAPI con

  • 本节详细介绍了 Engine , Connection 以及相关对象。重要的是要注意,当使用sqlAlchemy ORM时,通常不会访问这些对象;相反,这些对象 Session 对象用作数据库的接口。但是,对于围绕直接使用文本SQL语句和/或SQL表达式构造而构建的应用程序,而不需要ORM的更高级别管理服务的参与,则 Engine 和 Connection 是国王(还是王后?)-继续阅读。 基本用

  • 我正在寻找关于如何建立一个谷歌应用引擎项目的建议,该项目涉及多个模块,其中一个模块是GWT项目。我已经阅读了谷歌应用引擎模块文档(https://developers.google.com/appengine/docs/java/modules/)并在Stackoverflow上找到了一些帮助,比如本文使用appengine骨架原型发布GWT GAE应用程序引擎模块。然而,这涉及到很多东西,所以我

  • Google API客户端库 Google云存储客户端库 Google云存储API Google Cloud Storage JSON API Java客户端库 我仍然不知道每一个都是做什么的,我不知道如何在我的android客户端中实现云存储。 如果我使用云存储,为什么我需要应用引擎后端应用?我的后端不需要API,对吗?我可以使用Google Cloud Storage JSON API直接消耗