Process.waitFor()を使用してmysqldumpがバックアップ処理を終了するまで待機しようとしています。ここに私のコードです。Process.waitFor()はmysqlバックアップ中に永遠に待機します
///i use this mysql command, its working fine
String dump = "bkprefs/mysqldump "
+ "--host=localhost "
+ "--port=3306 "
+ "--user=root "
+ "--password= "
+ "--add-drop-table "
+ "--add-drop-database "
+ "--complete-insert "
+ "--extended-insert "
+ "test";
//execute the command
Process run = null;
try {
run = Runtime.getRuntime().exec(dump);
int stat = run.waitFor();
} catch (Exception ex) {
ex.printStackTrace();
}
問題は、run.waitfor()
がハングすることです。それは起こらない何かを待っているようです。
int stat = run.waitFor()
をThread.sleep(5)
に置き換えると、バックアップが正常に動作しています。しかし、私はこれに固執することはできません。なぜならバックアップ時間はデータベースのサイズによって異なるため、バックアップ処理が完了するのを待つのにThread.sleep
を使用するのは安全ではありません。
私を助けてください。返信は大歓迎です。
編集:
次のコードを使用して入力ストリームを消費します。
InputStream in = run.getInputStream();
FileWriter fstream = null;
try {
fstream = new FileWriter("haha.sql");
} catch (IOException ex) {
ex.printStackTrace();
}
BufferedWriter out = new BufferedWriter(fstream);
int nextChar;
StringBuffer sb = new StringBuffer();
try {
while ((nextChar = in.read()) != -1) {
out.write((char) nextChar);
//sb.append((char) nextChar);
}
out.flush();
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
ちょうど私が投稿したコードに続くコードは、 – Jemp
@Bnrdoの - あなたはこれらのストリームを処理するために_分離スレッドを使用していますか? – jtahlborn
いいえ、これらのストリームを処理するコードは文字通りバックアップコードに従います。 – Jemp