package com.product.file.util; import java.util.LinkedList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.product.core.entity.FieldSetEntity; import com.product.core.spring.context.SpringBeanUtil; import com.product.core.spring.context.SpringMVCContextHolder; import com.product.file.service.FileManagerService; import com.product.lucene.service.LuceneService; /** * 娑堟伅鏈嶅姟锛屾坊鍔犳秷鎭紝璇诲彇娑堟伅 * @author shicf * */ @Component public class CreateDocumentIndexThread { /**鑷凡瀹炰緥**/ private static CreateDocumentIndexThread createDocumentIndexThread; @Autowired public FileManagerService fileManagerService; /**鍐呴儴绾跨▼**/ private SendMailThread sendMailThread=null; @Autowired public LuceneService luceneService; /** 鐢熸垚鐨勬柊娑堟伅闃熷垪**/ private static LinkedList <FieldSetEntity> documentIndexs=new LinkedList<>(); /** * 闈欐€佸伐鍘傛柟娉� 鑾峰彇褰撳墠瀵硅薄瀹炰緥 澶氱嚎绋嬪畨鍏ㄥ崟渚嬫ā寮�(浣跨敤鍙岄噸鍚屾閿�) */ public static synchronized CreateDocumentIndexThread getInstance() { if (createDocumentIndexThread == null) { synchronized (CreateDocumentIndexThread.class) { if (createDocumentIndexThread == null) { createDocumentIndexThread=(CreateDocumentIndexThread) SpringBeanUtil.getBean("createDocumentIndexThread"); } } } createDocumentIndexThread.start(); return createDocumentIndexThread; } /** * 鍚姩缂撳瓨鐨勫埛鏂扮嚎绋� */ public void start() { if(sendMailThread ==null || sendMailThread.getState()== Thread.State.TERMINATED ) { sendMailThread=new SendMailThread(); sendMailThread.start(); SpringMVCContextHolder.getSystemLogger().info("Thread Of Refresh Cache Is Starting............."); } } /** * 鎶婇檮浠朵俊鎭坊鍔犲鍒椾腑 * @param user */ public synchronized void appendAttaInfo(FieldSetEntity documentIndex) { if(documentIndex!=null) { documentIndexs.add(documentIndex); } } /** * 鍙栧埛鏂拌〃闃熻〃鐨勭涓€涓� * @return */ public synchronized void pop() { while(!documentIndexs.isEmpty()) { FieldSetEntity ff=documentIndexs.pop(); if(luceneService ==null ) { luceneService=(LuceneService) SpringBeanUtil.getBean("luceneService"); } ff.setValue("file", fileManagerService.getFile(ff.getString("attachment_uuid"))); luceneService.createdIndex(ff); } } /** * 鍐呴儴绾跨▼锛屽畾鏃跺埛鏂扮紦瀛� * @author shicf * */ class SendMailThread extends Thread { @Override public void run() { try { while(true) { sleep(2000);// 鎵ц闂撮殧2s pop(); } } catch (InterruptedException e) { e.getStackTrace(); } } } }