최근에이 문제를 접했고 누군가가 저에게 어떤 도움을 줄 수 있는지 궁금합니다.쿼리 매개 변수를 사용하여 Runtime에서 Runtime으로 mongoexport 호출하기 (인코딩 문제?)
특정 날짜 범위로 내보내기가 제한된 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()));
}
}
모든 도움 감사 :
여기에 코드입니다!
감사합니다. 그것은 나를 위해 일한다. – Guillaume