gpt4 book ai didi

java - 使用查询参数通过运行时从 Java 调用 mongoexport(编码问题?)

转载 作者:可可西里 更新时间:2023-11-01 10:44:20 25 4
gpt4 key购买 nike

我最近遇到了这个问题,想知道是否有人可以帮助我阐明它。

我正在尝试从 Java 应用程序执行 mongoexport,导出限制在特定日期范围内。我构建了我的查询命令,并将其传递给 Runtime.exec。这将返回代码 2,表示“位置选项太多”。

但是,如果我获取传递给 exec 的字符串(在下面注销),并在命令行上运行它,它会完美运行!

我已将其缩小到“查询”参数——如果我不使用它构造命令,该命令将通过 Runtime.exec() 完美执行

我猜它的一些编码问题与查询参数中的引号有关,但我终究无法弄清楚如何解决它。

代码如下:

@Override
public void doWork() {
logger.info("Doing work");

//get the host for performing the mongo dump
String mongohome = GlimmerServer.config.getString("mongo.home");
String host = GlimmerServer.config.getString("mongo.dumphost");
String port = GlimmerServer.config.getString("mongo.dumpport");
String db = GlimmerServer.config.getString("mongo.dumpdb");
String collection = "stats_advert_daily";
String query = "'{date : new Date(1320451200000)}'"; //needs to be a proper query for mongo
String outputlocation = "/tmp/output.txt"; //needs to be asigned a random number name

String command = String.format(mongohome+"/bin/mongoexport " +
"--host %s " +
"--port %s " +
"--db %s " +
"--collection %s " +
"--query %s " +
"--fields _id,account_rid " +
"--out %s " +
"--slaveOk true " +
"--csv " +
"-vvvvv",
host,port,db,collection,query,outputlocation);

logger.info(command);

try{
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(command);
StreamGobbler errorGobbler = new StreamGobbler(pr.getErrorStream(),"ERROR",logger);
StreamGobbler outputGobbler = new StreamGobbler(pr.getInputStream(),"OUTPUT",logger);
errorGobbler.start();
outputGobbler.start();
int exitVal = pr.waitFor();

logger.info(String.format("Process executed with exit code %d",exitVal));

}catch(Exception e){
logger.error(String.format("Error running task. Exception %s", e.toString()));
}

}

感谢所有帮助!

干杯,道格

最佳答案

原来它与这个问题有关:Command fails in script, works in command line

String query = "'{date : new Date(1320451200000)}'";

查询中的空格导致了一些解析问题。

此外,不需要单引号。因此,有问题的代码现在看起来像这样:

String query = "{date:Date(1320451200000)}";

现在,如果我将整个命令复制到一个 shell 中,它不起作用(需要单引号),但仍会运行 Runtime.exec()。

关于java - 使用查询参数通过运行时从 Java 调用 mongoexport(编码问题?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16842292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com