博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Solr使用SolrJ出现Lock obtain timed out: NativeFSLock
阅读量:6263 次
发布时间:2019-06-22

本文共 1455 字,大约阅读时间需要 4 分钟。

hot3.png

    使用SolrJ建立索引时,HttpSolrServer可用,EmbeddedSolrServer报错:Error opening new searcher,Caused by: Lock obtain timed out: NativeFSLock。

    出现以上问题的原因是无法获取锁。查阅了很多资料都说在solrconfig文件中加上<unlockOnStartup> true </unlockOnStartup>,但是没有用。最后发现是程序启动的时候SolrDispatchFilter初始化了CoreContainer(项目沿用了solr自带的管理界面),导致EmbeddedSolrServer不能load CoreContainer。

    解决方法:

1、修改web.xml文件中过滤器SolrRequestFilter的class为org.common.servlet.SolrDispatchFilter。(这个类需要自己创建)

2、在solr官网上下载solr源代码,找到org.common.servlet.SolrDispatchFilter。复制java文件代码。

3、在org.common.servlet包下创建org.common.servlet.SolrDispatchFilter类,将复制的代码拷贝进来(注意修改package)。

4、同上复制BaseSolrFilter类至org.common.servlet包下。

5、org.common.servlet.SolrDispatchFilter中几个语句会报错,是因为那几个类不在当前包下,安装eclipse的提示直接导入这些包就行了。

6、为org.common.servlet.SolrDispatchFilte类添加静态域和静态方法。静态域为:

public static CoreContainer indexCoreContainer;

静态方法为:

  public static CoreContainer getIndexCores() { return indexCoreContainer;  }

并在已有createCoreContainer()方法中为静态域赋值:

  protected CoreContainer createCoreContainer() {    SolrResourceLoader loader = new SolrResourceLoader(SolrResourceLoader.locateSolrHome());    ConfigSolr config = loadConfigSolr(loader);    CoreContainer cores = new CoreContainer(loader, config);    cores.load();    indexCoreContainer=cores;    return cores;  }

7、调用,完成。

     CoreContainer container = SolrDispatchFilter.getIndexCores();     EmbeddedSolrServer solr = new EmbeddedSolrServer( container, "fulltext" );

转载于:https://my.oschina.net/3iVgTIG4E/blog/424004

你可能感兴趣的文章
JS(JavaScript)的进一步了解5(更新中···)
查看>>
python3基础学习笔记
查看>>
STL模板整理 pair
查看>>
【转】jmeter学习笔记——一个简单的性能测试
查看>>
企业级镜像管理系统Harbor
查看>>
A Plain English Guide to JavaScript Prototypes
查看>>
学习总结汇总
查看>>
Beta阶段测试报告
查看>>
JQ 练习题
查看>>
AndroidStudio、gradle、buildToolsVersion关系
查看>>
WPF入门教程系列八——布局之Grid与UniformGrid(三)
查看>>
递归调用顺序问题
查看>>
Git学习笔记一《版本控制之道-使用Git》
查看>>
Java8新特性--日期和时间API
查看>>
python itertools
查看>>
Eclipse自动补全+常用快捷键
查看>>
Dubbo 浅读
查看>>
payload有效载荷(转)
查看>>
利用谷歌控制台console调用后台代码
查看>>
jquery 点击按钮实现listbox的显示与隐藏,点击其他地方按钮外的地方,隐藏listbox...
查看>>