javaはcmd命令とmongodbスクリプトを実行します.

2445 ワード

出所:http://www.myexception.cn/database/646403.html
javaはcmdコマンドとmongodbスクリプトを実行します.
最近問題が発生したのは、Javaプログラムを使って実行中のMongodを閉じたいからです.
 
最初は強制終了プロセスのtaskillコマンドを使いたいですが、閉めれば再開に問題があります.
Mongoのjavaアプリでshutdown操作を実行したいです.コードは以下の通りです
Mongo m = new Mongo();
db = m.getDb("admin");
db.eval("db.shutdownServer");
//         :
db.command("shutdown");

 この場合、authが実行していないMongodはLocalhostで登録してshutdownを実行するしかないというヒントがあります.
 
そこで他の方法を考え始めました.oracleはシナリオを実行できると考えていますので、mongodbも脚本をサポートするべきだと思い、公式サイトに登録して驚きました.公式サイトでは中国語をサポートしています.そして确かにスクリプトが実行できるということを调べました.Ok、シナリオを书き始めます.脚本はjsで终わります.内容は以下の通りです
db = connect("admin");
db.shutdownServer();
 そしてjavaのコードは以下の通りです.
String cmd = "D:/mongodb-win32-i386-1.8.2/bin/mongo --shell " + "D:/mongodb-win32-i386-1.8.2/123.js";
		Runtime rt = Runtime.getRuntime();
		String[] command = new String[]{"cmd.exe" , "/C" , cmd};
		try {
			rt.exec(command);
			
		} catch (IOException e) {
			e.printStackTrace();
		}
 monoを実行するとき--shellパラメータを持ってjsファイルの位置を指定できます.
このようにすることで、実行中のモンスターを正常にクローズすることができます.しかし、javaファイルを使う必要があるという欠点があります.いいですよね.簡単になるために、他の方法を考えて、類似の操作を実現します.javaコードは以下の通りです
		String cmd = "D:/mongodb-win32-i386-1.8.2/bin/mongo";
		Runtime rt = Runtime.getRuntime();
		String[] command = new String[]{"cmd.exe" , "/C" , cmd};
		try {
			Process process = rt.exec(command);
			BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
			String line = "";
			
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
			bw.write("use admin;");
			bw.write("
"); bw.flush(); bw.write("db.shutdownServer();"); bw.flush(); bw.close(); while((line = br.readLine()) != null){ System.out.println(line); } } catch (IOException e) { e.printStackTrace(); }
 BufferedWriterを使って出力ストリームを確立したら、コンソールに命令を出力するようにコマンドを実行することができます.加入した操作に注意しないと実行できません.
やっと一番便利に実行できました.