这是我执行批处理文件以恢复 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/