2017-07-17 110 views
1

我正在研究使用MongoDB解析.txt文件的小型Java程序,并很好地显示信息以供分析。到目前为止,我必须在Windows上打开cmd并运行“mongod”行来启动数据库(我在Windows环境变量中设置了Mongo,因此我不必路径到MongoDB安装路径)。然后我可以运行Java程序。要停止mongod,我可以关闭我启动它的cmd窗口,也可以打开另一个cmd窗口并发出以下一系列命令:“mongo”,“use admin”,“db.shutdownServer()”。从Java应用程序中启动mongodb

我希望能够在我的Java程序中自动初始化和终止mongod,这样当我打开程序的jar时,服务器将自动启动,然后在程序关闭时停止。我知道我需要插入将执行这些命令的代码,但我不知道如何对它们进行编码。

到目前为止,这是我发现:

涉及 “调用Runtime.getRuntime()EXEC(” “)

建议;” - 这对第一个命令“mongod”起作用,我也相信“mongo”,但不适用于“使用管理员”。我猜这是由于命令是单独发布的(虽然“mongo”“use admin”和“db.shutdownServer()需要一起发布,或者由于行中的空格为”use admin“)。我也读过这种方法很粗糙,不应该使用

涉及“ProcessBuilder”的建议 - 我不太了解这种方法,并且我没有提到我为这种方法遇到的所有建议有空格的命令,这样的东西,将需要揣摩,以及如果这样的做法是采取。

还有没有其他的办法,否则我怎么能实现这两个中的一个?

+0

查找到过程和进程生成器 – efekctive

回答

0

p.isAlive()返回true。之后destroyForcibly()killall的mongod警告说,不存在的mongod

ProcessBuilder pb = new ProcessBuilder(); 
     pb.command("/XXXXX/mongo/bin/mongod", "--dbpath", "/XXXXX/mongo_data"); 
     Process p; 
     try { 
      p = pb.start(); 
      System.out.println(p.isAlive()); 
      p.destroyForcibly(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

EIDT

您还可以,如果你想进一步操纵他们重定向标准流Java流。

可以传递给建设者你需要的所有选项:

https://docs.mongodb.com/manual/reference/program/mongo/