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();
}
}
}
}