Browse Source

下载数据或定时更新虚拟列时删除旧的文件

sunyj 9 years ago
parent
commit
578e589e42

+ 1 - 1
search-console-b2b/src/main/java/com/uas/search/console/b2b/dao/LuceneQueueMessageDao.java

@@ -135,7 +135,7 @@ public class LuceneQueueMessageDao {
 				luceneQueueMessages.add(luceneQueueMessage);
 			}
 			sPage.setContent(luceneQueueMessages);
-		} catch (Exception e) {
+		} catch (Throwable e) {
 			throw new SearchException(e).setDetailedMessage(e);
 		} finally {
 			if (resultSet != null) {

+ 1 - 1
search-console-b2b/src/main/java/com/uas/search/console/b2b/jms/QueueMessageParser.java

@@ -96,7 +96,7 @@ public class QueueMessageParser {
 		} else {
 			try {
 				list = dao.findAll(ids);
-			} catch (Exception e) {
+			} catch (Throwable e) {
 				// 防止SQLRecoverableException导致应用终止
 				throw new SearchException(e).setDetailedMessage(e);
 			}

+ 10 - 7
search-console-b2b/src/main/java/com/uas/search/console/b2b/service/impl/IndexServiceImpl.java

@@ -41,6 +41,7 @@ import com.uas.search.console.b2b.model.ParsedQueueMessage;
 import com.uas.search.console.b2b.service.IndexService;
 import com.uas.search.console.b2b.support.IndexWriterManager;
 import com.uas.search.console.b2b.util.ClassAndTableNameUtils;
+import com.uas.search.console.b2b.util.FileUtils;
 import com.uas.search.console.b2b.util.ObjectToDocumentUtils;
 import com.uas.search.console.b2b.util.SearchUtils;
 
@@ -112,7 +113,7 @@ public class IndexServiceImpl implements IndexService {
 					createIndexesFromFiles(ClassAndTableNameUtils.toClass(tableName));
 				}
 			}
-		} catch (Exception e) {
+		} catch (Throwable e) {
 			// 防止SQLRecoverableException导致应用终止
 			throw new SearchException(e).setDetailedMessage(e);
 		} finally {
@@ -129,8 +130,9 @@ public class IndexServiceImpl implements IndexService {
 	 * @param clazz
 	 * @return 实际创建的索引的数目
 	 * @throws IOException
+	 * @throws InterruptedException
 	 */
-	private <T> Long createIndexes(Class<T> clazz) {
+	private <T> Long createIndexes(Class<T> clazz) throws IOException, InterruptedException {
 		Long startTime = new Date().getTime();
 		Table_name tableName = ClassAndTableNameUtils.toTableName(clazz);
 		logger.info("正在创建" + tableName.value() + "索引...");
@@ -181,8 +183,6 @@ public class IndexServiceImpl implements IndexService {
 				pageResult = dao.findAll(pageInfo);
 			}
 			indexWriter.commit();
-		} catch (InterruptedException | IOException e) {
-			logger.error("", e);
 		} finally {
 			indexWriterManager.release(tableName);
 		}
@@ -198,9 +198,10 @@ public class IndexServiceImpl implements IndexService {
 	 * 
 	 * @param clazz
 	 * @return 实际创建的索引的数目
+	 * @throws InterruptedException
 	 * @throws IOException
 	 */
-	private <T> Long createIndexesFromFiles(Class<T> clazz) {
+	private <T> Long createIndexesFromFiles(Class<T> clazz) throws InterruptedException, IOException {
 		Table_name tableName = ClassAndTableNameUtils.toTableName(clazz);
 		logger.info("正在创建" + tableName.value() + "索引...");
 		// 数据的总数目
@@ -239,8 +240,6 @@ public class IndexServiceImpl implements IndexService {
 				indexWriter.commit();
 				bufferedReader.close();
 			}
-		} catch (IOException | InterruptedException e) {
-			logger.error("", e);
 		} finally {
 			indexWriterManager.release(tableName);
 		}
@@ -306,6 +305,10 @@ public class IndexServiceImpl implements IndexService {
 		}
 		Long startTime = new Date().getTime();
 		Table_name tableName = ClassAndTableNameUtils.toTableName(clazz);
+		if (fileIndex == 1) {
+			// 删除旧的文件
+			FileUtils.deleteSubFiles(new File(SearchUtils.getDataPath(tableName)));
+		}
 		logger.info("Download... " + tableName.value());
 		JpaRepository<T, Long> dao = ClassAndTableNameUtils.getDao(clazz);
 

+ 6 - 2
search-console-b2b/src/main/java/com/uas/search/console/b2b/service/impl/UpdateVirtualColumnServiceImpl.java

@@ -19,6 +19,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import com.alibaba.fastjson.JSONObject;
+import com.uas.search.b2b.exception.SearchException;
 import com.uas.search.b2b.model.SPage;
 import com.uas.search.b2b.service.SearchService.Table_name;
 import com.uas.search.console.b2b.core.util.ContextUtils;
@@ -30,6 +31,7 @@ import com.uas.search.console.b2b.service.IndexService;
 import com.uas.search.console.b2b.service.InnerSearchService;
 import com.uas.search.console.b2b.service.UpdateVirtualColumnService;
 import com.uas.search.console.b2b.util.ClassAndTableNameUtils;
+import com.uas.search.console.b2b.util.FileUtils;
 import com.uas.search.console.b2b.util.SearchUtils;
 
 /**
@@ -78,11 +80,13 @@ public class UpdateVirtualColumnServiceImpl implements UpdateVirtualColumnServic
 		// 所以要先把数据保存到本地,等待全部获取之后重建索引
 		Long startTime = new Date().getTime();
 		Table_name tableName = ClassAndTableNameUtils.toTableName(clazz);
+		// 先删除旧的文件
+		FileUtils.deleteSubFiles(new File(SearchUtils.getDataPath(tableName)));
 
 		int page = PAGE_INDEX;
 		SPage<T> sPage = innerSearchService.getAllObjects(clazz, page, PAGE_SIZE);
 
-		// 数据库中数据的总数目
+		// 索引中数据的总数目
 		long totalElements = sPage.getTotalElement();
 		logger.info("发现数据:" + totalElements + "条");
 		int fileIndex = 1;
@@ -130,7 +134,7 @@ public class UpdateVirtualColumnServiceImpl implements UpdateVirtualColumnServic
 			printWriter.close();
 		} catch (FileNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException
 				| IllegalArgumentException | InvocationTargetException e) {
-			logger.error("", e);
+			throw new SearchException(e).setDetailedMessage(e);
 		}
 		Long endTime = new Date().getTime();
 		logger.info(String.format("修改数据%s条,耗时%.2fs\n ", totalElements, (endTime - startTime) / 1000.0));

+ 52 - 0
search-console-b2b/src/main/java/com/uas/search/console/b2b/util/FileUtils.java

@@ -0,0 +1,52 @@
+package com.uas.search.console.b2b.util;
+
+import java.io.File;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 文件操作
+ * 
+ * @author sunyj
+ * @since 2017年3月22日 上午9:40:41
+ */
+public class FileUtils {
+
+	private static Logger logger = LoggerFactory.getLogger(FileUtils.class);
+
+	/**
+	 * 删除文件夹下所有子文件(不含该文件夹本身)
+	 * 
+	 * @param dir
+	 */
+	public static void deleteSubFiles(File dir) {
+		if (dir == null || !dir.exists() || !dir.isDirectory()) {
+			return;
+		}
+		File[] files = dir.listFiles();
+		for (File file : files) {
+			delete(file);
+		}
+	}
+
+	/**
+	 * 删除文件(子文件及其本身均删除)
+	 * 
+	 * @param file
+	 */
+	public static void delete(File file) {
+		if (file == null || !file.exists()) {
+			return;
+		}
+		if (file.isDirectory()) {
+			File[] files = file.listFiles();
+			for (File f : files) {
+				delete(f);
+			}
+		}
+		file.delete();
+		logger.info("Deleted ..." + file.getPath());
+	}
+
+}