Die native Bibliothek sqljdbc_auth.dll wurde bereits in einem anderen Klassenladeprogramm geladen
Ich habe 2 Java-Webanwendungen, die mithilfe der integrierten Windows-Authentifizierung eine Verbindung zur SQL Server-Datenbank herstellen müssen.
Das erste, das geladen wird, funktioniert einwandfrei, aber das zweite löst die Ausnahme aus:
Native Library sqljdbc_auth.dll already loaded in another classloader
Der obige Fehler tritt auf, wenn ich die Datei sqljdbc_auth.dll in einen der folgenden Ordner lege:
C: \ WINDOWS \ system32 \ C: \ Programme \ Apache Software Foundation \ Tomcat 7.0 \ bin \ Wenn ich die sqljdbc_auth.dll in einen der folgenden Ordner lege:/ WEB-INF / lib Verzeichnis jeder WebanwendungC: \ Programme \ Apache Software Foundation \ Tomcat 7.0 \ lib \ Beide Apps werfen die Ausnahme:
Ich benutze diesen Code, um den Treiber zu laden:Wie kann ich das lösen?Jede Webanwendung verfügt über einen eigenen Classloader (der sie isoliert). Wenn Sie die Class.forName () -Methode aufrufen, gibt es einen statischen Block, der versucht, die gemeinsam genutzte Bibliothek (DLL-Datei) zu laden. Ihre beiden Web-Apps versuchen also, die gemeinsam genutzte Bibliothek zu laden, daher die Fehlermeldung beim zweiten versucht zu laden.
Failed to load the sqljdbc_auth.dll cause :- no sqljdbc_auth in java.library.path
Die JDBC-JAR, die Sie für sqlserver haben, sollte nicht mehr mit Ihren Kriegen gebündelt werden, sondern auf die
Class.forName("jdbc:sqlserver://<HOST>;databaseName=<DBNAME>;integratedSecurity=true;");
Ordner und kopieren Sie die Datei sqljdbc_auth.dll in den Ordner tomcat / bin. Auf diese Weise befindet sie sich im übergeordneten Klassenladeprogramm von tomcat, und die Klasse wird nur einmal geladen.