ソースを参照

admin 添加 redis 和 mongodb 的集群测试

reghao 1 ヶ月 前
コミット
e7da13f1cf

+ 5 - 1
admin/pom.xml

@@ -81,10 +81,14 @@
             <version>5.19.0</version>
         </dependency>
 
-        <dependency>
+        <!--<dependency>
             <groupId>org.mongodb</groupId>
             <artifactId>mongodb-driver-sync</artifactId>
             <version>4.11.1</version>
+        </dependency>-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-mongodb</artifactId>
         </dependency>
 
         <dependency>

+ 1 - 2
admin/src/main/java/cn/reghao/tnb/admin/controller/AdminController.java

@@ -1,9 +1,8 @@
 package cn.reghao.tnb.admin.controller;
 
-import cn.reghao.tnb.admin.db.TnbUserMapper;
+import cn.reghao.tnb.admin.db.mapper.TnbUserMapper;
 import cn.reghao.tnb.admin.model.po.TnbUser;
 import cn.reghao.tnb.admin.service.AdminService;
-import cn.reghao.tnb.common.db.SelectOption;
 import cn.reghao.tnb.common.web.WebResult;
 import io.swagger.v3.oas.annotations.Operation;
 import org.springframework.http.MediaType;

+ 1 - 1
admin/src/main/java/cn/reghao/tnb/admin/db/TnbUserMapper.java → admin/src/main/java/cn/reghao/tnb/admin/db/mapper/TnbUserMapper.java

@@ -1,4 +1,4 @@
-package cn.reghao.tnb.admin.db;
+package cn.reghao.tnb.admin.db.mapper;
 
 import cn.reghao.jutil.jdk.web.db.BaseMapper;
 import cn.reghao.tnb.admin.model.po.TnbUser;

+ 118 - 0
admin/src/main/java/cn/reghao/tnb/admin/db/mongo/TnbCommentMongo.java

@@ -0,0 +1,118 @@
+package cn.reghao.tnb.admin.db.mongo;
+
+import cn.reghao.jutil.jdk.web.db.BaseCrud;
+import cn.reghao.jutil.jdk.web.db.BaseQuery;
+import cn.reghao.tnb.admin.model.po.TnbComment;
+import com.mongodb.MongoBulkWriteException;
+import com.mongodb.client.model.InsertManyOptions;
+import com.mongodb.client.result.DeleteResult;
+import com.mongodb.client.result.InsertManyResult;
+import org.bson.Document;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.convert.MongoConverter;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Repository;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author reghao
+ * @date 2026-01-31 01:00:25
+ */
+@Repository
+public class TnbCommentMongo implements BaseCrud<TnbComment>, BaseQuery<TnbComment> {
+    private final String colName = "TnbComment";
+    private final MongoTemplate mongoTemplate;
+    private final MongoConverter mongoConverter;
+    private final int pageSize = 20;
+
+    public TnbCommentMongo(MongoTemplate mongoTemplate, MongoConverter mongoConverter) {
+        this.mongoTemplate = mongoTemplate;
+        this.mongoConverter = mongoConverter;
+    }
+
+    @Override
+    public TnbComment save(TnbComment userComment) {
+        Document doc = new Document();
+        mongoConverter.write(userComment, doc);
+        mongoTemplate.getCollection(colName).insertOne(doc);
+        return null;
+    }
+
+    @Override
+    public void saveAll(List<TnbComment> list) {
+        List<Document> documents = list.stream()
+                .map(t -> {
+                    Document doc = new Document();
+                    mongoConverter.write(t, doc);
+                    return doc;
+                })
+                .collect(Collectors.toList());
+
+        InsertManyOptions options = new InsertManyOptions();
+        // 忽略 insert 失败的文档
+        options.ordered(false);
+        try {
+            InsertManyResult result = mongoTemplate.getCollection(colName).insertMany(documents, options);
+        }  catch (MongoBulkWriteException ignore) {
+        }
+    }
+
+    @Override
+    public void update(TnbComment userComment) {
+        userComment.setUpdateTime(LocalDateTime.now());
+
+        Document document = new Document();
+        mongoConverter.write(userComment, document);
+        Document filter = new Document();
+        mongoTemplate.getCollection(colName).replaceOne(filter, document);
+    }
+
+    @Override
+    public void delete(TnbComment userComment) {
+        Query query = new Query();
+        query.addCriteria(Criteria.where("_id").is(userComment.getId()));
+        DeleteResult deleteResult = mongoTemplate.remove(query, TnbComment.class);
+    }
+
+    public long countByPostId(String postId) {
+        Document filter = new Document();
+        filter.put("postId", postId);
+        filter.put("pCommentId", 0);
+        return mongoTemplate.getCollection(colName).countDocuments(filter);
+    }
+
+    public List<TnbComment> findByPostId(String postId, long pageNumber) {
+        Query query = new Query();
+        query.addCriteria(Criteria.where("postId").is(postId));
+        query.addCriteria(Criteria.where("pCommentId").is(0));
+        query.with(Sort.by(new Sort.Order(Sort.Direction.DESC, "publishAt")));
+        query.skip((pageNumber - 1) * pageSize).limit(pageSize);
+        return mongoTemplate.find(query, TnbComment.class, colName);
+    }
+
+    public long countChildComment(long commentId) {
+        Document filter = new Document();
+        filter.put("pCommentId", commentId);
+        return mongoTemplate.getCollection(colName).countDocuments(filter);
+    }
+
+    public List<TnbComment> findByParentId(long commentId, long pageNumber, int pageSize) {
+        Query query = new Query();
+        query.addCriteria(Criteria.where("pCommentId").is(commentId));
+        query.with(Sort.by(new Sort.Order(Sort.Direction.ASC, "publishAt")));
+        query.skip((pageNumber - 1) * pageSize).limit(pageSize);
+        return mongoTemplate.find(query, TnbComment.class, colName);
+    }
+
+    public TnbComment findByCommentId(long commentId) {
+        Query query = new Query();
+        query.addCriteria(Criteria.where("commentId").is(commentId));
+        List<TnbComment> list = mongoTemplate.find(query, TnbComment.class, colName);
+        return list.isEmpty() ? null : list.get(0);
+    }
+}

+ 15 - 0
admin/src/main/java/cn/reghao/tnb/admin/model/po/TnbComment.java

@@ -0,0 +1,15 @@
+package cn.reghao.tnb.admin.model.po;
+
+import cn.reghao.jutil.jdk.web.db.BaseObject;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author reghao
+ * @date 2026-01-31 01:00:16
+ */
+@Setter
+@Getter
+public class TnbComment extends BaseObject<String> {
+    private String content;
+}

+ 4 - 4
admin/src/main/java/cn/reghao/tnb/admin/service/TnbZkService.java

@@ -43,16 +43,16 @@ public class TnbZkService {
     private final String springcloud = "/services";
     private final Map<String, SpringCloudService> springCloudMap = new HashMap<>();
 
-    private final String connectString;
-    private final CuratorFramework client;
+    private String connectString;
+    private CuratorFramework client;
 
     public TnbZkService(Environment environment) {
-        String address = environment.getProperty("dubbo.registry.address");
+        /*String address = environment.getProperty("dubbo.registry.address");
         this.connectString = address.replace("zookeeper://", "");
         client = getZkClient();
 
         listenNode(dubbo, "dubbo");
-        listenNode(springcloud, "springcloud");
+        listenNode(springcloud, "springcloud");*/
     }
 
     public CuratorFramework getZkClient() {

+ 2 - 0
admin/src/main/resources/application-cluster.yml

@@ -7,6 +7,8 @@ spring:
     discovery:
       enabled: true
   data:
+    mongodb:
+      uri: mongodb://test:Test_123456@192.168.0.213:27017,192.168.0.214:27017,192.168.0.215:27017/tnb_content_rdb?replicaSet=mymongo&readPreference=secondaryPreferred&connectTimeoutMS=300000
     redis:
       database: 0
       password: Test@123456

+ 26 - 17
admin/src/main/resources/application-dev.yml

@@ -1,33 +1,42 @@
 dubbo:
   registry:
-    group: dubbo
-    address: zookeeper://127.0.0.1:2181
+    address: N/A
 spring:
   cloud:
     discovery:
       enabled: true
   data:
     mongodb:
-      host: 127.0.0.1
-      database: "tnb_content_rdb"
-      authentication-database: admin
-      username: dev
-      password: Dev@123456
+      uri: mongodb://test:Test_123456@192.168.0.214:27017,192.168.0.215:27017,192.168.0.216:27017/tnb_content_rdb?replicaSet=mymongo&authSource=admin&readPreference=secondaryPreferred&connectTimeoutMS=300000
     redis:
       database: 0
-      host: 127.0.0.1
-      port: 6379
-      password: Dev@123456
+      password: Test@123456
+      lettuce:
+        pool:
+          # 最大连接数
+          max-active: 20
+          # 连接池中获取连接时最大等待时间ms
+          max-wait: 300
+          # 最大空闲连接数
+          max-idle: 5
+          # 最小空闲连接数
+          min-idle: 1
+      sentinel:
+        master: mymaster
+        password: Test@123456
+        nodes:
+          - 192.168.0.214:26379
+          - 192.168.0.215:26379
+          - 192.168.0.216:26379
   rabbitmq:
-    host: 127.0.0.1
-    port: 5672
+    addresses: 192.168.0.211:5672,192.168.0.212:5672,192.168.0.213:5672
     virtual-host: /
-    username: dev
-    password: Dev@123456
+    username: test
+    password: Test@123456
   datasource:
-    url: jdbc:mysql://127.0.0.1/tnb_account_rdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
-    username: dev
-    password: Dev@123456
+    url: jdbc:mysql://192.168.0.215:3306,192.168.0.216:3306/testdb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
+    username: test
+    password: Test@123456
 eureka:
   client:
     service-url:

+ 1 - 1
admin/src/main/resources/mapper/TnbUserMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
-<mapper namespace="cn.reghao.tnb.admin.db.TnbUserMapper">
+<mapper namespace="cn.reghao.tnb.admin.db.mapper.TnbUserMapper">
     <insert id="save">
         insert into tnb_user
         (`username`)

+ 14 - 0
admin/src/test/java/RedisTest.java

@@ -1,4 +1,6 @@
 import cn.reghao.tnb.admin.AdminApplication;
+import cn.reghao.tnb.admin.db.mongo.TnbCommentMongo;
+import cn.reghao.tnb.admin.model.po.TnbComment;
 import io.lettuce.core.RedisClient;
 import io.lettuce.core.RedisURI;
 import io.lettuce.core.api.StatefulRedisConnection;
@@ -87,4 +89,16 @@ public class RedisTest {
         String address = environment.getProperty("dubbo.registry.address");
         String connectString = address.replace("zookeeper://", "").replace("?backup=", ",");
     }
+
+    @Autowired
+    TnbCommentMongo tnbCommentMongo;
+    @Test
+    public void mongoTest() {
+        TnbComment tnbComment = new TnbComment();
+        tnbComment.setContent("halo world");
+        tnbCommentMongo.save(tnbComment);
+
+        List<TnbComment> list = tnbCommentMongo.findAll();
+        System.out.println();
+    }
 }