package com.jspxcms.common.fulltext; import org.apache.lucene.search.NRTManager; import org.apache.lucene.search.NRTManager.TrackingIndexWriter; import org.apache.lucene.search.NRTManagerReopenThread; import org.apache.lucene.search.SearcherFactory; import org.springframework.beans.factory.BeanInitializationException; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; /** * 近实时Manager工厂类 * * @author liufang * */ public class NRTManagerFactoryBean implements FactoryBean<NRTManager>, InitializingBean, DisposableBean { private NRTManager nrtManager; private TrackingIndexWriter trackingIndexWriter; private NRTManagerReopenThread reopenThread; public NRTManager getObject() throws Exception { if (nrtManager == null) { nrtManager = new NRTManager(trackingIndexWriter, new SearcherFactory()); reopenThread = new NRTManagerReopenThread(nrtManager, 5.0, 0.1); reopenThread.setName("NRT Reopen Thread"); reopenThread.setPriority(Math.min(Thread.currentThread() .getPriority() + 2, Thread.MAX_PRIORITY)); reopenThread.setDaemon(true); reopenThread.start(); } return nrtManager; } public Class<NRTManager> getObjectType() { return NRTManager.class; } public void afterPropertiesSet() throws Exception { if (trackingIndexWriter == null) { throw new BeanInitializationException( "Must specify a trackingIndexWriter property"); } } public void destroy() throws Exception { if (reopenThread != null) { reopenThread.close(); } if (nrtManager != null) { nrtManager.close(); } } public boolean isSingleton() { return true; } public void setTrackingIndexWriter(TrackingIndexWriter trackingIndexWriter) { this.trackingIndexWriter = trackingIndexWriter; } }