我编写了一个 SOLR 自定义查询解析器(org.apache.solr.search.QParser 的实现)。我的查询解析器使用一些第三方 jar。第三方 jar 之一需要 native 库(.so 文件)才能工作。在非云模式下运行 solr 时,该插件工作正常,但是当我在云模式下运行它时,SOLR 会抛出以下错误:
java.lang.UnsatisfiedLinkError: Native Library /opt/solr-6.2.0/lib/xyz.so already loaded in another classloader
我已将所有第三方和查询解析器 jar 和 .so 文件保留在 SOLR_HOME/lib 目录中并进行了修改:
在 solrconfig.xml 中添加了 lib dir= "${solr.install.dir:../../../..}/lib/"
在 SOLR_HOME/bin/solr 文件中:
SOLR_START_OPTS=“-Djava.library.path=$SOLR_TIP/lib/”
请帮忙。提前致谢。
最佳答案
最后,我找到了解决方案(归功于我的一位学长)。在云模式下运行时,请按照以下说明操作:
- 在
SOLR_HOME
中创建lib
目录并将 native-library(.so) 文件放在那里。 在
SOLR_HOME/bin/solr
文件中,将此行添加到SOLR_START_OPTS
:SOLR_START_OPTS=“-Djava.library.path=$SOLR_TIP/lib/”
在每个节点库中创建
lib
文件夹(即 SOLR_HOME/example/cloud/node1/lib、SOLR_HOME/example/cloud/node2/lib)并将所有自定义插件 jar 放入这些新创建的 lib 文件夹。以云模式重新启动 solr。
希望,这会有所帮助!
关于java - 如何在Apache SOLR Cloud模式下加载原生库(.so)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42138963/