|
@@ -0,0 +1,112 @@
|
|
|
+package com.yonge.log.service.impl;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.yonge.log.dal.dao.HistoryMessageDao;
|
|
|
+import com.yonge.log.dal.model.HistoryMessage;
|
|
|
+import com.yonge.log.service.HistoryMessageService;
|
|
|
+import com.yonge.mongodb.dao.BaseDaoWithMongo;
|
|
|
+import com.yonge.mongodb.service.impl.BaseServiceImplWithMongo;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.io.BufferedReader;
|
|
|
+import java.io.File;
|
|
|
+import java.io.FileInputStream;
|
|
|
+import java.io.FileReader;
|
|
|
+import java.nio.ByteBuffer;
|
|
|
+import java.nio.channels.FileChannel;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class HistoryMessageServiceImpl extends BaseServiceImplWithMongo<String, HistoryMessage> implements HistoryMessageService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private HistoryMessageDao historyMessageDao;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BaseDaoWithMongo<String, HistoryMessage> getDAO() {
|
|
|
+ return historyMessageDao;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void saveImHistoryMessage(File file) throws Exception {
|
|
|
+ long length = file.length();
|
|
|
+ if(length > 1048576){
|
|
|
+ doNioReadFile(file);
|
|
|
+ }else {
|
|
|
+ doBufferReadFile(file);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void doBufferReadFile(File file) throws Exception
|
|
|
+ {
|
|
|
+ BufferedReader reader = null;
|
|
|
+ try {
|
|
|
+ reader = new BufferedReader(new FileReader(file));
|
|
|
+ String line = null;
|
|
|
+ int num = 0;
|
|
|
+ List<HistoryMessage> historyMessages = new ArrayList<>();
|
|
|
+ while ((line = reader.readLine()) != null){
|
|
|
+ try {
|
|
|
+ historyMessages.add(JSONObject.parseObject(line.substring(line.indexOf("{")), HistoryMessage.class));
|
|
|
+ if(historyMessages.size() >= 2000){
|
|
|
+ historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
|
|
|
+ historyMessages.clear();
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ num++;
|
|
|
+ }
|
|
|
+ if(historyMessages.size() > 0){
|
|
|
+ historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
|
|
|
+ }
|
|
|
+ } finally {
|
|
|
+ reader.close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void doNioReadFile(File file) throws Exception
|
|
|
+ {
|
|
|
+ String enterStr = "\n";
|
|
|
+
|
|
|
+ FileChannel inChannel = new FileInputStream(file).getChannel();
|
|
|
+ ByteBuffer buffer = ByteBuffer.allocate(1048576);
|
|
|
+
|
|
|
+ StringBuilder newlinesBui = new StringBuilder();
|
|
|
+ while (inChannel.read(buffer) != -1)
|
|
|
+ {
|
|
|
+ buffer.flip();
|
|
|
+ //数据组合.
|
|
|
+ String content = new String(buffer.array());
|
|
|
+ newlinesBui.append(content).toString();
|
|
|
+
|
|
|
+ int fromIndex = 0;
|
|
|
+ int endIndex = -1;
|
|
|
+ //循环找到 \n
|
|
|
+ List<HistoryMessage> historyMessages = new ArrayList<>();
|
|
|
+ while ((endIndex = newlinesBui.indexOf(enterStr, fromIndex)) > -1)
|
|
|
+ {
|
|
|
+ //得到一行
|
|
|
+ String line = newlinesBui.substring(fromIndex, endIndex);
|
|
|
+ try {
|
|
|
+ historyMessages.add(JSONObject.parseObject(line.substring(line.indexOf("{")), HistoryMessage.class));
|
|
|
+ if(historyMessages.size() >= 2000){
|
|
|
+ historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
|
|
|
+ historyMessages.clear();
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ fromIndex = endIndex + 1;
|
|
|
+ }
|
|
|
+ if(historyMessages.size() > 0){
|
|
|
+ historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
|
|
|
+ }
|
|
|
+ newlinesBui.delete(0, fromIndex);
|
|
|
+ buffer.clear();
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|