java.lang.UnsatisfiedLinkError:Native Library sqljdbc_auth.dll已经加载到另一个类加载器中

时间:2018-01-10 03:56:29

标签: java sql-server tomcat

我有多个应用程序需要使用Windows身份验证连接到MSSQL。

加载的第一个webApp工作正常。但剩下的失败提示

Caused by: java.lang.UnsatisfiedLinkError: Native Library $tomcat/bin/sqljdbc_auth.dll already loaded in another classloader

以下是使用的代码

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
connection= DriverManager.getConnection("jdbc:sqlserver://localhost;databaseName=XXX;integratedSecurity=true");

我放了         sqljdbc * .jar - > tomcat * / lib和sqljdbc_auth.dll - > Tomcat的* / bin中

好像我的所有应用程序都试图多次加载共享库($ tomcat / bin / dll)。因此第一次加载工作,剩下的失败。

编辑:据我所知,本机库(DLL)只能加载到JVM一次,因此出错了,但是我在浏览网络后仍然没有解决方案。

如何只加载一次dll?

请帮助!!

1 个答案:

答案 0 :(得分:0)

我猜。删除行

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

可以解决问题。

DriverManager

的javadoc所述
  

DriverManager方法getConnectiongetDrivers已得到增强,可支持Java标准版Service Provider机制。
  ...
  应用程序不再需要使用Class.forName()明确加载JDBC驱动程序。

编辑这需要一个支持JDBC 4.0 API的jdbc驱动程序。从Microsoft JDBC驱动程序4.0开始应该是这种情况(参见:https://docs.microsoft.com/en-us/sql/connect/jdbc/system-requirements-for-the-jdbc-driver

Microsoft JDBC驱动程序支持的矩阵,您可以在https://docs.microsoft.com/en-us/sql/connect/jdbc/microsoft-jdbc-driver-for-sql-server-support-matrix

找到哪个SQL Server版本