gpt4 book ai didi

java - 根据属性文件中的类路径加载 Java 类

转载 作者:行者123 更新时间:2023-12-01 16:12:02 24 4
gpt4 key购买 nike

我的应用程序使用 JDBC 数据库驱动程序。我从 jar 文件(对于我当前使用的 DB2 来说是 db2jcc.jar)加载这些文件。有了类路径中的这个 jar,一切都很好,但我需要从应用程序的配置文件中的属性中找到该 jar - 例如,

database.driver=/opt/IBM/db2/V9.5/java/db2jcc.jar

我可以通过 URLClassLoader 加载该类,但问题是我需要将由此创建的对象视为显式 DB2XADataSource。例如:

URLClassLoader dbClassLoader = new URLClassLoader(new URL[]{driverJar});
xaClass = dbClassLoader.loadClass("com.ibm.db2.jcc.DB2XADataSource");

DB2XADataSource dataSource = (DB2XADataSource) xaClass.newInstance();

dataSource.setCurrentSchema(DATABASE_SCHEMA); // <- dataSource has to be a
dataSource.setDatabaseName(DATABASE_NAME); // DB2XADataSource to do this

(稍微重新排列和重命名;实际上,我在包含此代码的类的构造函数中执行了 loadClass,而 newInstance 则在其方法之一中。)

我想我陷入了类加载器的困惑中,因为加载我的类的类加载器正在尝试查找 DB2XADataSource 以便进行转换,但 URL 类加载器在树中不在它的上方。问题是,距离我应该停止工作很长时间(在英国),我不知道如何最好地以一种模糊的整洁和理智的方式解决它。

想法?

谢谢。

最佳答案

最简单的方法是仅使用 java.beans API(或直接反射,如果必须的话)来调用 setter 方法。

或者:您的数据库代码需要链接到动态加载的代码。因此,动态加载数据库代码。多少由你决定。您可能会加载除“ Bootstrap ”之外的几乎所有内容。

关于java - 根据属性文件中的类路径加载 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/774323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com