Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java从批处理文件备份/恢复mongoDB?_Java_Mongodb_Batch File - Fatal编程技术网

使用java从批处理文件备份/恢复mongoDB?

使用java从批处理文件备份/恢复mongoDB?,java,mongodb,batch-file,Java,Mongodb,Batch File,下面是我执行批处理文件以恢复mongo数据库的java代码。这需要花费很长时间(持续运行25分钟,但尚未停止)。当我只恢复单个集合时,它就可以正常工作。问题是当我恢复完整的数据库时 先谢谢你 Process pDb = Runtime.getRuntime().exec("cmd /c restore_db.bat",null, new File(projectPath)); try (final BufferedReader b = new BufferedReader(new InputS

下面是我执行批处理文件以恢复mongo数据库的java代码。这需要花费很长时间(持续运行25分钟,但尚未停止)。当我只恢复单个集合时,它就可以正常工作。问题是当我恢复完整的数据库时

先谢谢你

Process pDb = Runtime.getRuntime().exec("cmd /c restore_db.bat",null, new File(projectPath));

try (final BufferedReader b = new BufferedReader(new InputStreamReader(pDb.getInputStream()))) {
        String line;

        while ((line = b.readLine()) != null) {
                System.out.println(line);
        }
}

log.info("waiting for restore complete database...");

int exitVal = pDb.waitFor();

log.info("Process exitValue: " + exitVal);
这是我的restore_db.bat批处理文件代码

@echo off

REM move into the backups directory
CD C:\project\backup

REM restore the database
echo Running restore complete database
mongorestore --db dbName dump/app

echo RESTORE COMPLETE
读完这篇文章后,我设法解决了我的问题。我将java代码更改为

Process pDb = Runtime.getRuntime().exec("cmd /c restore_db.bat",null, new File(projectPath));

InputStream stderr = pDb.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);

try (final BufferedReader b = new BufferedReader(isr)) {
            String line;

            while ((line = b.readLine()) != null) {
                  System.out.println(line);
            }
}

log.info("waiting for restore complete database...");

exitVal = pDb.waitFor();

log.info("Process exitValue: " + exitVal);
然后我得到了挂起过程的实际原因。我在java控制台中遇到以下错误:E11000重复键错误索引。在批处理文件中,我正在恢复同一个数据库。当我在批处理文件中更改数据库的名称时,数据库将立即恢复。 i、 e

改为

mongorestore --db dbName2 dump/app

然后恢复名为dbName2的新数据库。

当您手动恢复时,需要多长时间才能完成?需要1秒或2秒。好的,谢谢您的回答-您是否只运行了批处理文件?需要多长时间?是的,我运行批处理文件。批处理文件在此行中花费时间。mongorestore--db数据库名转储/应用程序
mongorestore --db dbName2 dump/app