我有2个java web应用程序,需要使用Windows集成身份验证连接到SQL Server数据库。
加载的第一个可以正常工作,但是第二个会抛出异常:
Native Library sqljdbc_auth.dll already loaded in another classloader
当我将sqljdbc_auth.dll放入其中一个文件夹时,出现上述错误:
如果我将sqljdbc_auth.dll放在下面的某个文件夹中:
每个web的Apache文件\Apache Software application
的
两个应用程序都会抛出异常:
Failed to load the sqljdbc_auth.dll cause :- no sqljdbc_auth in java.library.path
我使用下面的代码来加载驱动程序:
Class.forName("jdbc:sqlserver://<HOST>;databaseName=<DBNAME>;integratedSecurity=true;");
我该怎么解决它呢?
发布于 2012-05-18 07:54:06
每个web应用程序都有自己的Classloader (隔离它们)。当你调用Class.forName()方法时,有一个静态块试图加载共享库(dll文件)-所以你的两个web应用程序都在尝试加载共享库,因此当第二个应用程序试图加载时会出现错误消息。
用于sqlserver的JDBC jar应该从绑定到way的JDBC jar移到tomcat 7.0/lib
文件夹,并将sqljdbc_auth.dll复制到tomcat/bin文件夹-这样它就会在tomcat父类加载器中,并且类只会被加载一次。
|----------------------------------|
| sqljdbc*.jar --> tomcat*/lib |
|----------------------------------|
| sqljdbc_auth.dll --> tomcat*/bin |
|----------------------------------|
发布于 2012-05-18 18:30:30
我认为你在正确的轨道上。
对于命令行启动,您可以通过设置环境变量轻松地解决no sqljdbc_auth in java.library.path问题
CATALINA_OPTS=-Djava.library.path=/path/to/dll
如果将tomcat作为服务运行,请更改下面的Options参数
HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat7\Parameters\Java
包括:
-Djava.library.path=/path/to/dll
发布于 2016-08-24 14:16:24
同样的错误也发生在Jasper Studio中。
可能不是最好的解决方案,但是将sqljdbc4.jar放在C:\Program Files (x86)\TIBCO\Jaspersoft Studio-6.1.0.final\features\jre.win32.win32.x86.feature_1.7.0.u80\jre\lib\ext中,将sqljdbc_auth.dll放在C:\Program Files (x86)\TIBCO\Jaspersoft and中
它会起作用的。
https://stackoverflow.com/questions/10637585
复制相似问题