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

标签 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?

请帮忙!!

最佳答案

我猜。即删除行

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

会解决问题。

DriverManager 的 javadoc 中所述

The DriverManager methods getConnection and getDrivers have been enhanced to support the Java Standard Edition Service Provider mechanism.
...
Applications no longer need to explictly load JDBC drivers using Class.forName().

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

您可以在 https://learn.microsoft.com/en-us/sql/connect/jdbc/microsoft-jdbc-driver-for-sql-server-support-matrix 找到 Microsoft JDBC 驱动程序支持哪个 SQL 服务器版本的矩阵

关于java.lang.UnsatisfiedLinkError : Native Library sqljdbc_auth. dll 已经加载到另一个类加载器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48180078/

相关文章:

java - 如何构建文件名列表?

sql-server - 将数据从一个 SQL Server 数据库表复制到另一个 SQL Server 数据库表

C# SqlConnection 连接字符串

docker - 尝试在 docker 容器中运行 tomcat8/rest api 应用程序组合 - 无法映射端口

tomcat - Tomcat 中的 LDAP 错误 - 需要 TLS secret 性

java - Protostuff 1.3.8 中的运行时架构

java - 字符串解耦和字段名称

c# - 一对一变成一对多 Entity Framework 生成数据库优先

tomcat - Grails 在缺少类 GrailsMock 的 tomcat 上失败

java - 如何从 "unmodifiable"映射中删除 null 或空列表