【问题标题】:java.lang.UnsatisfiedLinkError: Native Library sqljdbc_auth.dll already loaded in another classloaderjava.lang.UnsatisfiedLinkError:本机库 sqljdbc_auth.dll 已在另一个类加载器中加载
【发布时间】:2018-01-10 03:56:29
【问题描述】:

我有多个应用程序需要使用 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?

请帮忙!!

【问题讨论】:

标签: java sql-server tomcat


【解决方案1】:

我猜。删除线

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

会解决问题。

正如DriverManager的javadoc中提到的

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

edit 这需要一个支持 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 驱动程序支持哪个 SQL Server 版本的矩阵,您可以在 https://docs.microsoft.com/en-us/sql/connect/jdbc/microsoft-jdbc-driver-for-sql-server-support-matrix 找到

【讨论】:

  • 抛出异常 java.sql.SQLException: No suitable driver found for jdbc:sqlserver://localhost;databaseName=xxx;integratedSecurity=true
  • @divyakrishna 这意味着您使用的驱动程序不支持 JDBC 4.0 API。你可以更新驱动。我用一些额外的信息更新了我的答案。
  • 在我的情况下,驱动程序版本和 jar 完美匹配。当仅使用单个 Web 应用程序(任何人)加载 tomcat 时,Web 应用程序成功连接到数据库。这就是我不认为版本控制的原因。
  • @divyakrishna 如果它包含文件META-INF/services/java.sql.Driver,您能否查看sqljdbc*.jar。如果不是,您使用的驱动程序不支持 JDBC 4.0 API(请参阅 DriverManager 的 javadoc)。顺便提一句。您使用的是哪个 Microsoft JDBC 驱动程序版本?
  • 问题已解决。谢谢。我已经在我的所有应用程序中从 WEB-INF/lib 中删除了 jar。并且只放置在 tomcat 中用于共享本机库。它现在可以工作了。
猜你喜欢
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
  • 2016-08-24
  • 1970-01-01
相关资源
最近更新 更多