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

标签 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 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

最佳答案

看完这篇link我设法解决了我的问题。我将我的 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 重复键错误索引。我正在恢复同一个数据库的批处理文件中。当我在批处理文件中更改数据库名称时,数据库会立即恢复。 即

mongorestore --db dbName dump/app 

改为

mongorestore --db dbName2 dump/app

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

关于java - 使用java从批处理文件备份/恢复mongoDB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38009919/

相关文章:

java - Sitemesh 在运行时更 retrofit 饰器

ruby-on-rails - 如何更有效地聚合这些数据?

node.js - 如何处理表单中 Angular.js select 中的嵌套数据?

java - 如何静默编译Java文件除非出现错误?

java - 使用 JNLP/Webstart 打开文件

java - 如何阻止工作流程转换名称被截断? (吉拉 6.x)

java - 分派(dispatch)到 View 时,如何停止使用 Spring 处理程序中的命令对象隐式丰富模型?

Java运行时exec不执行批处理脚本

java - Maven Project(Cucumber+TestNG+Selenium-Java] 测试无法使用 mvn clean install 在命令行上运行测试

python - 从 MongoDB 到 PostgreSQL - Django