继上一篇文章
我造了一个轮子去写系统日志
MongoDB
MongoDB我们都知道是一个Nosql,其次MongoDB可以存储海量数据,正好满足我们的需求,日志本身就会很多,基本每一个操作可能都会保存一条日志记录,如果选用mysql或者oracle的话成本感觉相对较高,而MongoDB会存在少量数据丢失的情况,当然我们用来保存日志,少几条操作也没关系?是吧!
MongoDB是将数据存储为一个文档的格式,文档格式则类似于一个JSON对象。
代码语言:javascript复制{
name: "Zero",
date: "2020-05-20",
detail: "客户支付了十元",
type: "payment"
}
MondoDB简单搭建
代码语言:javascript复制package com.zero.na;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
/**
* 芒狗DB 工具类
*/
public class MongodbUtil {
private String DEFAULT_DATABASE_NAME = "test";
private MongoClient mongoClient;
private static MongodbUtil instance = new MongodbUtil();
private MongodbUtil() {
mongoClient = new MongoClient("152.136.**.**", 27017);
}
public static MongodbUtil getInstance() {
return instance;
}
// 插入
public void insert(String collectionName, Document doc, Object id) {
if (id != null) {
doc.put("_id", id);
}
insertOne(DEFAULT_DATABASE_NAME, collectionName, doc);
}
private void insertOne(String default_database_name, String collectionName, Document doc) {
MongoDatabase mongoDatabase = getMondoDatabase(default_database_name);
mongoDatabase.getCollection(collectionName).insertOne(doc);
}
private MongoDatabase getMondoDatabase(String default_database_name) {
MongoDatabase database = mongoClient.getDatabase(default_database_name);
return database;
}
}
在原有的写日志类中添加保存日志业务 WriteLogUtil.java
代码语言:javascript复制 private void write(Map<String, String> item) {
Document document = new Document();
for (String key : item.keySet()) {
document.put(key, item.get(key));
}
MongodbUtil.getInstance().insert("test", document, null);
}
效果
读日志
代码语言:javascript复制package com.zero.na;
import org.bson.Document;
import javax.print.Doc;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class WriteLogUtil {
// 省略......
private List<Document> query (String name) {
return MongodbUtil.getInstance().query("test", name);
}
}
代码语言:javascript复制package com.zero.na;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import org.bson.BsonDocument;
import org.bson.Document;
import org.bson.conversions.Bson;
import javax.print.Doc;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.function.Consumer;
/**
* 芒狗DB 工具类
*/
public class MongodbUtil {
// 省略.....
// 查询
public List<Document> query(String collectionName, String params) {
return queryList(DEFAULT_DATABASE_NAME, collectionName, params);
}
private List<Document> queryList(String default_database_name, String collectionName, String params) {
MongoDatabase mongoDatabase = getMondoDatabase(default_database_name);
MongoCollection<Document> collection = mongoDatabase.getCollection(collectionName);
Bson filter = Filters.and(Filters.eq("name", params));
FindIterable<Document> list = collection.find(filter);
MongoCursor<Document> iterator = list.iterator();
List<Document> result = new ArrayList<>();
while (iterator.hasNext()) {
Document item = iterator.next();
result.add(item);
}
return result;
}
}