我有一个
org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: NativeFSLock@/XXXXX/User_Index/write.lock异常,我读到写超时锁定应该从默认的1秒增加。
(
有趣的是,之前我没有这个异常,但我正在处理一个任务,以便在项目中使用Spring。有很小的可能性,有更多的竞争事务试图访问索引...?我不认为Spring事务配置正确:
<!-- for the @Transactional annotations -->
<tx:annotation-driven />
<context:component-scan base-package="XXX.audit, XXX.authorization, XXX.policy, XXX.printing, XXX.provisioning, XXX.service.plainspring" />
<!-- defining Transaction Manager for Spring -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="dataSource" ref="dataSource" />
<property name="sessionFactory" ref="sessionFactory" />
</bean> )
因此,我尝试将写锁定超时配置为
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" lazy-init="true">
...
<property name="hibernateProperties">
<props>
...
<prop key="hibernate.search.lucene_version">LUCENE_35</prop>
<prop key="hibernate.search.default.indexwriter.writeLockTimeout">20000</prop>
...
</property>
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>但没有成功。Apache Lucene没有配置文件。也没有Lucene代码,只使用Hibernate搜索(即不可能设置IndexWriter的值)
如何配置写锁定超时?
Apache Lucene 3.5 Hibernate Search 4.1.1
谢谢,
V。
发布于 2017-10-02 17:19:36
没有配置IndexWriter锁定超时的选项,因为永远不需要这样做。
如果您看到发生这样的超时,通常是由于以下两种原因之一:
首先检查剩下的场景:关闭您的应用程序,并查看是否有文件名为write.lock。如果应用程序没有运行,则可以安全地删除此文件。
如果不是这样,那么您可能有两个不同的Hibernate Search实例试图使用相同的索引目录,并且都试图写入该目录。这不是一个有效的配置,您会得到异常,因为索引已经被其他实例锁定;增加锁定超时只会让您等待很长一段时间-可能直到其他应用程序关闭。
不要在应用程序之间共享索引;如果确实需要这样做,请查看手册中的基于JMS的后端或其他非默认后端,这些后端允许多个应用程序共享一个IndexWriter。
最后,请考虑升级。这些版本都非常旧。
https://stackoverflow.com/questions/46522117
复制相似问题