Browse Source

处理MongoDB数据删除问题,删除所有集合中的数据,不能删除集合,也不能删库。

wukai 1 năm trước cách đây
mục cha
commit
1040256c32

+ 2 - 1
sync-admin/src/main/java/com/jjt/RuoYiApplication.java

@@ -3,13 +3,14 @@ package com.jjt;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
 
 /**
  * 启动程序
  *
  * @author ruoyi
  */
-@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
+@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, MongoAutoConfiguration.class})
 public class RuoYiApplication {
     public static void main(String[] args) {
         // System.setProperty("spring.devtools.restart.enabled", "false");

+ 23 - 0
sync-admin/src/test/java/OutMongoTest.java

@@ -0,0 +1,23 @@
+import com.jjt.RuoYiApplication;
+import com.jjt.out.service.IOutMongoService;
+import com.jjt.system.service.ISysConfigService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import javax.annotation.Resource;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = RuoYiApplication.class)
+public class OutMongoTest {
+    @Resource
+    private IOutMongoService mongoService;
+    @Resource
+    private ISysConfigService configService;
+
+    @Test
+    public void test() {
+        mongoService.clean();
+    }
+}

+ 3 - 0
sync-common/src/main/java/com/jjt/common/utils/LinuxCommand.java

@@ -22,6 +22,7 @@ public class LinuxCommand {
      */
     public static void exec(String cmd) throws Exception {
         Process process = Runtime.getRuntime().exec(cmd);
+        log.info("要执行命令了哟:{}", cmd);
         print(process);
 
         int code = process.waitFor();
@@ -39,6 +40,8 @@ public class LinuxCommand {
      */
     public static void exec(String[] cmd) throws Exception {
         Process process = Runtime.getRuntime().exec(cmd);
+
+        log.info("要执行命令了哟:{}", Arrays.toString(cmd));
         print(process);
 
         int code = process.waitFor();

+ 14 - 2
sync-in/src/main/java/com/jjt/in/service/impl/InMongoServiceImpl.java

@@ -22,6 +22,8 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 数据同步Service业务层处理
@@ -56,8 +58,18 @@ public class InMongoServiceImpl extends InBaseService implements IInMongoService
             filaName += "local/oplog.rs.bson";
         }
         try {
-            String cmd = String.format("/usr/bin/mongorestore --host %s --port %s --drop --oplogReplay %s", host, port, filaName);
-            LinuxCommand.exec(cmd);
+            List<String> command = new ArrayList<>();
+            command.add("/usr/bin/mongorestore");
+            command.add("--host");
+            command.add(host);
+            command.add("--port");
+            command.add(port);
+            command.add("--drop");
+            command.add("--oplogReplay");
+            command.add(filaName);
+
+//            String cmd = String.format("/usr/bin/mongorestore --host %s --port %s --drop --oplogReplay %s", host, port, filaName);
+            LinuxCommand.exec(command);
         } catch (Exception e) {
             log.error("还原mongo出错啦:{}", e.getMessage());
             throw new Exception(e.getMessage());

+ 7 - 0
sync-out/pom.xml

@@ -26,6 +26,12 @@
             <groupId>com.jjt</groupId>
             <artifactId>jjt-system</artifactId>
         </dependency>
+        <!-- 引入mongodb-->
+        <dependency>
+            <groupId>org.mongodb</groupId>
+            <artifactId>mongo-java-driver</artifactId>
+            <version>3.11.2</version>
+        </dependency>
 
         <!--引入es-high-level-client相关依赖  start-->
         <dependency>
@@ -63,6 +69,7 @@
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
         </dependency>
+
     </dependencies>
 
 </project>

+ 5 - 0
sync-out/src/main/java/com/jjt/out/service/IOutMongoService.java

@@ -15,4 +15,9 @@ public interface IOutMongoService {
      * 增量导出
      */
     public void inc();
+
+    /**
+     * 清除所有db下所有集合数据
+     */
+    public void clean();
 }

+ 35 - 3
sync-out/src/main/java/com/jjt/out/service/impl/OutMongoServiceImpl.java

@@ -9,9 +9,12 @@ import com.jjt.common.utils.DateUtils;
 import com.jjt.common.utils.LinuxCommand;
 import com.jjt.out.domain.OutProcessInfo;
 import com.jjt.out.service.IOutMongoService;
-import com.jjt.out.service.IOutMysqlService;
 import com.jjt.out.service.IOutProcessInfoService;
 import com.jjt.system.service.ISysConfigService;
+import com.mongodb.BasicDBObject;
+import com.mongodb.MongoClient;
+import com.mongodb.client.MongoCollection;
+import com.mongodb.client.MongoDatabase;
 import net.lingala.zip4j.ZipFile;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.io.FileUtils;
@@ -23,9 +26,7 @@ import javax.annotation.Resource;
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
-import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.nio.file.StandardCopyOption;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -162,4 +163,35 @@ public class OutMongoServiceImpl extends OutBaseService implements IOutMongoServ
     public void inc() {
         exec(true);
     }
+
+    /**
+     * 清除所有db下所有集合数据
+     */
+    @Override
+    public void clean() {
+        String params = sysConfigService.selectConfigByKey("out.mongo.info");
+
+        JSONObject mongoInfo = JSONObject.parseObject(params);
+        String host = mongoInfo.getString("host");
+        String port = mongoInfo.getString("port");
+        MongoClient mongo = new MongoClient(host, Integer.parseInt(port));
+
+        List<String> baseDB = new ArrayList<>();
+        baseDB.add("admin");
+        baseDB.add("config");
+        baseDB.add("local");
+        //查询所有的databases
+        for (String dbName : mongo.listDatabaseNames()) {
+            if (!baseDB.contains(dbName)) {
+                log.info("开始处理db:{}", dbName);
+                MongoDatabase db = mongo.getDatabase(dbName);
+                //查询所有的聚集集合
+                for (String name : db.listCollectionNames()) {
+                    log.info("开始删除集合{}的数据", name);
+                    MongoCollection col = db.getCollection(name);
+                    col.deleteMany(new BasicDBObject());
+                }
+            }
+        }
+    }
 }

+ 4 - 0
sync-out/src/main/java/com/jjt/out/task/MongoOutTask.java

@@ -23,4 +23,8 @@ public class MongoOutTask {
     public void full() {
         mongoService.full();
     }
+
+    public void clean() {
+        mongoService.clean();
+    }
 }

+ 58 - 0
sync-out/src/test/java/com/test/MongoTest.java

@@ -0,0 +1,58 @@
+package com.test;
+
+import com.mongodb.BasicDBObject;
+import com.mongodb.MongoClient;
+import com.mongodb.client.MongoCollection;
+import com.mongodb.client.MongoCursor;
+import com.mongodb.client.MongoDatabase;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MongoTest {
+
+    public static void main(String[] args) {
+        MongoClient mongo = new MongoClient("192.168.188.60", 27017);
+
+        List<String> baseDB = new ArrayList<>();
+        baseDB.add("admin");
+        baseDB.add("config");
+        baseDB.add("local");
+        //查询所有的databases
+        for (String db : mongo.listDatabaseNames()) {
+            if (!baseDB.contains(db)) {
+                System.err.println(db);
+            }
+        }
+        MongoDatabase db = mongo.getDatabase("test");
+//        //查询所有的聚集集合
+        for (String name : db.listCollectionNames()) {
+            System.err.println(name);
+        }
+//        MongoCollection col = db.getCollection("collection");
+//        col.deleteMany(new BasicDBObject());
+////        这条时删除集合下所有文档滴
+//        MongoCursor cursor = col.find().cursor();
+//        while (cursor.hasNext()) {
+//            System.err.println(cursor.next());
+//        }
+//        Bson bson=new Bson() {
+//            @Override
+//            public <TDocument> BsonDocument toBsonDocument(Class<TDocument> aClass, CodecRegistry codecRegistry) {
+//                return null;
+//            }
+//        }
+//        col.deleteMany({});
+//        System.err.println(fi.cursor();
+//        DBCollection users = db.getCollection("user");
+//        //查询所有数据
+//        DBCursor cursor = users.find();
+//        while (cursor.hasNext()) {
+//            System.out.println(cursor.next());
+//        }
+//        System.out.println(cursor.count());
+//        System.out.println(cursor.getCursorId());
+//        System.out.println(JSON.serialize(cursor));
+    }
+
+}