2017-07-17 108 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/