我有多个应用程序需要使用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?
请帮助!!
答案 0 :(得分:0)
我猜。删除行
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
可以解决问题。
的javadoc所述DriverManager方法
getConnection
和getDrivers
已得到增强,可支持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版本