gpt4 book ai didi

java - 从外部 JAR 加载没有名称的 JDBC 驱动程序

转载 作者:行者123 更新时间:2023-11-29 04:06:42 24 4
gpt4 key购买 nike

我希望用户决定使用哪个数据库。他应该只提供连接器 JAR 文件和数据库 URL。

问题是,我不知道驱动程序的类名。

是否可以使用 URLClassLoader 加载 JAR 并在不知道名称的情况下注册驱动程序。到目前为止,我只找到了已知驱动程序名称的解决方案。

我还尝试添加一个相对于我导出的 JAR 文件的类路径的目录(使用 maven 程序集插件),但它没有用。

<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
<manifestEntries>
<Class-Path>libs/*</Class-Path>
</manifestEntries>
</archive>
</configuration>

如有任何帮助,我们将不胜感激。

最佳答案

所有 JDBC 4 和更高版本兼容的驱动程序都包含一个服务定义文件以用于 java.util.ServiceLoader .如果您的应用程序在初始类路径上有驱动程序,则您无需执行任何操作,因为 java.sql.DriverManager将自动加载这些驱动程序。

如果驱动程序位于辅助类路径中(例如,在 Web 应用程序上下文中,或手动初始化的类加载器),那么您将需要手动加载驱动程序以使其注册。在那种情况下,应该可以使用 ServiceLoader自己枚举该上下文的类路径上的所有可用驱动程序。

这可以通过 ServiceLoader.load​(Class<S> service) 来完成或 ServiceLoader.load​(Class<S> service, ClassLoader loader) .然后,您可以迭代(或流式传输)可用驱动程序的实例(这将自动使用 DriverManager 注册它们)。

例如

ServiceLoader<Driver> drivers = ServiceLoader.load(java.sql.Driver.class, yourClassLoader);
for (Driver driver : drivers) {
System.out.println(driver.getClass().getName());
}

您唯一需要知道的是要连接的正确 JDBC url。

请注意,如果您的类加载器的生命周期较短,这可能会导致内存泄漏:您需要显式注销驱动程序以避免此类泄漏。

关于java - 从外部 JAR 加载没有名称的 JDBC 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58171431/

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