From a5750efce0b4aca02819e55f0f910f03c6663dc0 Mon Sep 17 00:00:00 2001 From: lxyer <237809796@qq.com> Date: Sun, 18 Nov 2018 11:01:50 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E3=80=90=E6=96=B0=E5=A2=9E/=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E3=80=91=E5=B0=86=E6=97=A5=E5=BF=97=E5=86=99=E5=85=A5?= =?UTF-8?q?=E5=88=B0ArangoDb=EF=BC=88=E5=8E=9F=E6=9D=A5MongoDb=EF=BC=89=20?= =?UTF-8?q?2=E3=80=81=E3=80=90=E5=8D=87=E7=BA=A7=E3=80=91=20=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E5=A4=9A=E4=B8=AAjar=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 26 ++++--- src/com/lxyer/bbs/base/ArangoKit.java | 41 ++++++++++ src/com/lxyer/bbs/base/BaseServlet.java | 28 +++---- src/com/lxyer/bbs/base/TaskQueue.java | 10 ++- src/com/lxyer/bbs/base/entity/VisLog.java | 74 +++++++++++++++++++ src/com/lxyer/bbs/content/ContentService.java | 6 +- 6 files changed, 155 insertions(+), 30 deletions(-) create mode 100644 src/com/lxyer/bbs/base/ArangoKit.java create mode 100644 src/com/lxyer/bbs/base/entity/VisLog.java diff --git a/pom.xml b/pom.xml index 80daefe..11147f7 100644 --- a/pom.xml +++ b/pom.xml @@ -13,8 +13,8 @@ org.apache.maven.plugins maven-compiler-plugin - 10 - 10 + 11 + 11 @@ -25,12 +25,12 @@ org.redkale redkale - 1.9.6 + 1.9.8 org.redkalex redkale-plugins - 1.9.6 + 1.9.8 @@ -41,17 +41,21 @@ com.jfinal enjoy - 3.4 - - - org.mongodb - mongodb-driver - 3.8.0 + 3.5 + + org.mongodb mongo-java-driver - 3.8.0 + 3.9.0 + + + + + com.arangodb + arangodb-java-driver + 5.0.1 diff --git a/src/com/lxyer/bbs/base/ArangoKit.java b/src/com/lxyer/bbs/base/ArangoKit.java new file mode 100644 index 0000000..95e2576 --- /dev/null +++ b/src/com/lxyer/bbs/base/ArangoKit.java @@ -0,0 +1,41 @@ +package com.lxyer.bbs.base; + +import com.arangodb.ArangoCollection; +import com.arangodb.ArangoDB; +import com.arangodb.ArangoDatabase; +import com.lxyer.bbs.base.entity.VisLog; + +import java.util.function.Function; + +/** + * @author: liangxianyou at 2018/11/18 9:02. + */ +public class ArangoKit { + + protected static final boolean winos = System.getProperty("os.name").contains("Window"); + + protected static Function chDev = (s) -> s + (winos ? "_dev" : ""); + + //Arango + protected static ArangoDB arangoDb = new ArangoDB.Builder().host("120.24.230.60", 8529).user("root").password("pwd123").build(); + protected static ArangoDatabase dbDev = arangoDb.db(chDev.apply("redbbs")); + protected static ArangoCollection colVisLog = dbDev.collection(chDev.apply("vis_log")); + + //check exists + static { + if (!dbDev.exists()) { + dbDev.create(); + } + + if (!colVisLog.exists()) { + colVisLog.create(); + } + } + + public static void save(T t) { + if (t instanceof VisLog) { + colVisLog.insertDocument(t); + } + } + +} diff --git a/src/com/lxyer/bbs/base/BaseServlet.java b/src/com/lxyer/bbs/base/BaseServlet.java index 6ab56cc..0f58633 100644 --- a/src/com/lxyer/bbs/base/BaseServlet.java +++ b/src/com/lxyer/bbs/base/BaseServlet.java @@ -1,6 +1,7 @@ package com.lxyer.bbs.base; import com.jfinal.kit.Kv; +import com.lxyer.bbs.base.entity.VisLog; import com.lxyer.bbs.base.kit.RetCodes; import com.lxyer.bbs.base.user.UserInfo; import com.lxyer.bbs.base.user.UserService; @@ -14,7 +15,6 @@ import org.redkale.util.AnyValue; import javax.annotation.Resource; import java.io.File; import java.io.IOException; -import java.util.Map; import java.util.concurrent.CompletableFuture; import static com.lxyer.bbs.base.kit.RetCodes.RET_USER_UNLOGIN; @@ -39,7 +39,7 @@ public class BaseServlet extends HttpServlet { protected CommentService commentService; @Resource - protected TaskQueue logQueue; + protected TaskQueue logQueue; @Override public void init(HttpContext context, AnyValue config) { @@ -74,23 +74,23 @@ public class BaseServlet extends HttpServlet { //异步记录访问日志 final int userid = currentid; CompletableFuture.runAsync(()->{ - Kv visLog = new Kv();//ip、time、userid、uri、para - visLog.set("ip", request.getRemoteAddr()); - visLog.set("time", System.currentTimeMillis()); - visLog.set("userid", userid); - visLog.set("uri", request.getRequestURI()); - - Kv headers = Kv.create(); - request.getHeaders().forEach((k,v)->{ - headers.set(k, request.getHeader(k)); - }); - visLog.set("headers", headers); Kv para = Kv.create(); for (String key : request.getParameterNames()){ para.set(key, request.getParameter(key)); } - visLog.set("para", para); + Kv headers = Kv.create(); + request.getHeaders().forEach((k,v)->{ + headers.set(k, request.getHeader(k)); + }); + + VisLog visLog = new VisLog(); + visLog.setIp(request.getRemoteAddr()); + visLog.setHeaders(headers); + visLog.setPara(para); + visLog.setTime(System.currentTimeMillis()); + visLog.setFtime(String.format("%1$tY%1$tm%1$td%1$tH%1$tM%1$tS", visLog.getTime())); + try { logQueue.put(visLog); } catch (InterruptedException e) { diff --git a/src/com/lxyer/bbs/base/TaskQueue.java b/src/com/lxyer/bbs/base/TaskQueue.java index f16e2e9..18be055 100644 --- a/src/com/lxyer/bbs/base/TaskQueue.java +++ b/src/com/lxyer/bbs/base/TaskQueue.java @@ -1,5 +1,6 @@ package com.lxyer.bbs.base; +import com.lxyer.bbs.base.entity.VisLog; import com.lxyer.bbs.base.kit.LxyKit; import com.lxyer.bbs.base.user.UserInfo; import com.lxyer.bbs.base.user.UserRecord; @@ -83,7 +84,12 @@ public class TaskQueue extends BaseService implements Runnable public void run() { try { while (true){ - Map logData = (Map) take(); + T task = take(); + if (task instanceof VisLog) { + ArangoKit.save(task); + } + + /*Map logData = (Map) take(); logData.put("ftime", String.format("%1$tY%1$tm%1$td%1$tH%1$tM%1$tS", logData.get("time"))); visLog.insertOne(new Document(logData)); @@ -94,7 +100,7 @@ public class TaskQueue extends BaseService implements Runnable //[访问量] if (uri.startsWith("/jie/detail/")){ updateViewNumAsync(logData); - } + }*/ } } catch (InterruptedException e) { e.printStackTrace(); diff --git a/src/com/lxyer/bbs/base/entity/VisLog.java b/src/com/lxyer/bbs/base/entity/VisLog.java new file mode 100644 index 0000000..1515cef --- /dev/null +++ b/src/com/lxyer/bbs/base/entity/VisLog.java @@ -0,0 +1,74 @@ +package com.lxyer.bbs.base.entity; + +import java.util.Map; + +/** + * 存贮数据到 非关系型数据库 + * + * @author: liangxianyou at 2018/11/18 8:47. + */ +public class VisLog { + private String ip; + private String userid; + private String ftime; + private String uri; + private long time; + private Map para; + private Map headers; + + public String getIp() { + return ip; + } + + public void setIp(String ip) { + this.ip = ip; + } + + public String getUserid() { + return userid; + } + + public void setUserid(String userid) { + this.userid = userid; + } + + public String getFtime() { + return ftime; + } + + public void setFtime(String ftime) { + this.ftime = ftime; + } + + public String getUri() { + return uri; + } + + public void setUri(String uri) { + this.uri = uri; + } + + public long getTime() { + return time; + } + + public void setTime(long time) { + this.time = time; + } + + public Map getPara() { + return para; + } + + public void setPara(Map para) { + this.para = para; + } + + public Map getHeaders() { + return headers; + } + + public void setHeaders(Map headers) { + this.headers = headers; + } +} diff --git a/src/com/lxyer/bbs/content/ContentService.java b/src/com/lxyer/bbs/content/ContentService.java index 333ed30..84bded1 100644 --- a/src/com/lxyer/bbs/content/ContentService.java +++ b/src/com/lxyer/bbs/content/ContentService.java @@ -79,7 +79,7 @@ public class ContentService extends BaseService implements UIService{ if (x.getUserid() == userid || userService.isAdmin(userid)){//身份验证 后修改内容 - source.updateColumnAsync(content,SelectColumn.createIncludes("title", "digest", "content","type", "status")); + source.updateColumnAsync(content,SelectColumn.includes("title", "digest", "content","type", "status")); } }); } @@ -130,10 +130,10 @@ public class ContentService extends BaseService implements UIService actLogs = source.querySheet(ActLog.class, SelectColumn.createIncludes("tid", "createtime"), flipper, filterNode); + Sheet actLogs = source.querySheet(ActLog.class, SelectColumn.includes("tid", "createtime"), flipper, filterNode); int[] contentids = actLogs.stream().mapToInt(x -> x.getTid()).toArray(); - Sheet contents = source.querySheet(Content.class, SelectColumn.createIncludes("contentid", "title"), flipper.sort(null), FilterNode.create("contentid", FilterExpress.IN, contentids)); + Sheet contents = source.querySheet(Content.class, SelectColumn.includes("contentid", "title"), flipper.sort(null), FilterNode.create("contentid", FilterExpress.IN, contentids)); Sheet infos = createInfo(contents);