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

本机库sqljdbc_auth.dll已经加载到另一个类加载器中

房学文
2023-03-14

我有两个java html" target="_blank">web应用程序,需要使用Windows集成身份验证连接到SQL Server数据库。

加载的第一个可以正常工作,但第二个会引发异常:

Native Library sqljdbc_auth.dll already loaded in another classloader

当我放置sqljdbc\u auth时,就会出现上述错误。其中一个文件夹中的dll:

  • C:\WINDOWS\system 32\
  • C:\Program Files\Apache Software Foundation\Tomcat 7.0\bin\

如果我放置sqljdbc\u auth。dll位于以下文件夹之一:

  • /每个WEB应用程序的WEB-INF/lib目录
  • C: \程序文件\ Apache软件基础\ Tomcat 7.0\lib\

两个应用程序都会引发异常:

Failed to load the sqljdbc_auth.dll cause :- no sqljdbc_auth in java.library.path

我使用此代码加载驱动程序:

Class.forName("jdbc:sqlserver://<HOST>;databaseName=<DBNAME>;integratedSecurity=true;");

我该怎么解决?

共有3个答案

尹昀
2023-03-14

Jasper Studio中也出现了相同的错误。

可能不是最好的解决方案,但将sqljdbc4.jar放在C:\Program Files(x86)\TIBCO\Jaspersoft Studio-6.1.0.final\功能\jre.win32.win32.x86.feature_1.7.0. u80\jre\lib\ext和sqljdbc_auth.dll在C:\Program Files(x86)\TIBCO\Jaspersoft Studio-6.1.0.final\功能\jre.win32.win32.x86.feature_1.7.0. u80\jre\bin

它会起作用的。

龚勇锐
2023-03-14

我认为你在正确的轨道上。

对于命令行启动,您可以通过设置环境变量轻松解决java.library.pathsqljdbc_auth问题

CATALINA_OPTS=-Djava.library.path=/path/to/dll

如果将tomcat作为服务运行,请更改下面的Options参数

HKEY\U LOCAL\U MACHINE\SOFTWARE\Apache SOFTWARE Foundation\Procrun 2.0\Tomcat7\Parameters\Java

包括:

-Djava.library.path=/path/to/dll
燕建中
2023-03-14

每个web应用程序都有自己的类加载器(隔离它们)。当你给班级打电话的时候。方法中,有一个静态块正在尝试加载共享库(dll文件),因此您的两个web应用都在尝试加载共享库,因此当第二个应用尝试加载时会显示错误消息。

您用于sqlserver的JDBC jar应该从与WAR捆绑在一起转移到tomcat 7.0/lib文件夹中,并复制sqljdbc\u auth。dll到tomcat/bin文件夹-这样它将位于tomcat父类加载器中,并且该类将只加载一次。

|----------------------------------|
| sqljdbc*.jar     --> tomcat*/lib |
|----------------------------------|
| sqljdbc_auth.dll --> tomcat*/bin |
|----------------------------------|
 类似资料:
  • 问题内容: 我已经部署了一个Web应用程序,其中包含以下代码。 现在,我部署了另一个具有相同代码的Web应用程序。尝试加载库时,将引发以下错误。 我想同时运行这两个应用程序。 直到现在我已经尝试了: 在一个应用程序中加载库,并将上述异常捕获到另一个应用程序中 从两个应用程序中删除了jar,并将opencv.jar放入Tomcat的类路径(即/ usr / share / tomcat7 / lib

  • 我已经部署了一个Web应用程序,其中包含以下代码。 现在,我部署了另一个也有相同代码的Web应用程序。当它试图加载库时,它抛出以下错误。 我想同时运行这两个应用程序。 null 我得到了一个例外

  • 我正在我的web应用程序中集成一个web服务。web服务为我提供了一个。dll和。jar文件。我把.dd放在/jre/bin中,把.jar放在/jre/lib中,然后开发代码并部署应用程序。在开发过程中,我还将。jar文件包含在我的项目构建路径中。在tomcat中运行它时,它给了我一个错误:

  • 如果认为Tomcat的公共类加载器正在加载这个类,实例化它(按照:http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html),然后将引用传递给webapp,从而绕过webapp类加载器,这是不是错的? 是否有一种方法可以告诉Tomcat实例化我的单例(强制公共类加载程序执行),然后提供该实例来满足我的WebApp的依赖性? 任何

  • 我有一个类,它实现了接口。类由system classloader加载,接口在第三方组件中定义,我认为第三方组件将接口加载到另一个类加载器(动态类加载器)中。 当我试图创建的新实例时,我得到的是的。我想这是因为它是由不同的类加载器加载的。 我尝试创建(与Guice使用的类似),然后从system类加载器加载类,并从另一个类加载器加载所有其他类,我认为这是用于的类加载器,但没有成功。 有办法绕过它吗

  • 问题内容: 我有一个遵循标准目录布局的项目设置(虽然未使用Maven): 本机DLL位于资源文件夹中,而源位于Java文件夹中。resources文件夹是Java类路径的成员。 我现在想加载DLL,而不必设置JRE 选项或设置变量,以便可以通过简单的双击来启动生成的jar文件。 运行jar文件时是否可以将资源文件夹添加到库搜索路径而无需进行其他配置?例如,设置与清单中的相似? 问题答案: 直到今天