Solr:使用多个 SQL 服务器数据源会导致错误:“...\sqljdbc_auth.dll 已在另一个类加载器中加载”

Solr:使用多个 SQL 服务器数据源会导致错误:“...\sqljdbc_auth.dll 已在另一个类加载器中加载”

我在 Jetty 中运行了一个 Solr 实例,该实例使用 JRE 8,有 3 个集合(与核心相同,对吧?),并且还有更多集合。我正在从 SQL Server 索引数据,使用 NTLM 作为 Java 进程的标识进行连接。第一个核心索引正常,第二个核心出现错误。以下是简化的堆栈跟踪。

ERROR - 2014-06-16 11:32:29.897; org.apache.solr.common.SolrException; Full Import failed:java.lang.RuntimeException: java.lang.RuntimeException: org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to execute query:
...
Caused by: java.lang.RuntimeException: org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to execute query: 
...
Caused by: org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to execute query:
...
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: This driver is not configured for integrated authentication
...
Caused by: java.lang.UnsatisfiedLinkError: Native Library C:\Program Files\Java\jre8\bin\sqljdbc_auth.dll already loaded in another classloader
...

基于stackoverflow 回答我的理解是,我要么需要为每个 index/core 提供 dll 和 jar 的单独实例,要么将 dll jar 放在一个位置,以便它们由更高级别的父类加载器加载一次。目前,jar 位于 collection/core/index 内的 lib 目录中

我的理解是sqljdbc4.jar谁正在寻找 dll,所以我希望这两者都在最早的运行时加载,是吗?

我尝试将其放入sqljdbc_auth.dll各种 bin 文件夹中,包括一个用于 jre8 的文件夹、一个用于 jetty 的文件夹、一个用于 solr 的文件夹、一个用于 collection 的文件夹,但都无济于事。

我也尝试使用 jTDS 驱动程序,结果相同,但错误不同。

我的直觉告诉我,这是 Solr 中的配置问题,而不是 JRE 或 Jetty 问题。我查找了相关的配置进行更改solr.xmlsolrconfig.xml但没有发现任何明显的问题。

如果有帮助的话,我可以发布我的 java.​library.​path 和 java.​class.​path。

我应该补充一下,我对 Solr 还很陌生,上周才刚刚了解它。我的配置非常标准。我有一个常规的 Jetty 设置和一个 BitNami 设置。

我陷入困境。欢迎提出任何建议。谢谢。

答案1

将 SQL 服务器(或 jTDS)JAR 放在 Jetty 的启动类路径或 JRE lib/ext 文件夹中,以确保它尽早加载。

相关内容