【问题标题】:Start mongodb from within Java application从 Java 应用程序中启动 mongodb
【发布时间】:2017-07-17 18:23:02
【问题描述】:

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

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

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

涉及“Runtime.getRuntime().exec("");”的建议- 这确实适用于第一个命令“mongod”,我相信“mongo”也是如此,但不适用于“使用管理员”。我猜这要么是因为命令是单独发出的(而“mongo”“use admin”和“db.shutdownServer() 需要一起发出,顺序)或者是因为“use admin”行中的空格。我也读过,这种方法很粗糙,不应该使用。

涉及“ProcessBuilder”的建议 - 我不太了解这种方法。此外,我遇到的关于这种方法的所有建议都没有提到命令中有空格,因此如果要采用这种方法,也需要弄清楚这一点。

还有其他方法吗,或者我该如何实现这两种方法之一?

【问题讨论】:

  • 查看流程和流程构建器

标签: java windows mongodb


【解决方案1】:

p.isAlive() 返回真。在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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 2013-02-04
    相关资源
    最近更新 更多