JAva呼び出しpythonまたはshellスクリプト

1677 ワード

前回の作業で問題が発生しました.javaでアクセスプロセスを実行するのに時間がかかりました(以前のプロジェクトでは、業務操作はアクセスプロセスでしか実行できないようです).実行中に実行時間が長すぎるため、プロセスの実行半分が中断し、javaデータベース接続プールが自動的に中断しないことを確認しました.ローカルシミュレーションアクセスプロセス(mysqlでスリープ)では、中断されないことがわかりました.mysqlタイムアウトパラメータの設定を表示するのも実行時間より長いです.中断操作は発生しません.(やはりサーバー上のmysqlパラメータの設定の問題で、パラメータを表示するのはまた実行時間より長い)この時、私は手動でkillを落としてプロセスを落として、問題は再現して、最後の結論、mysqlの方面の問題、しかしパラメータは簡単に変えることができなくて、サーバーの端末で実行してタイムアウトすることはできなくて、最後にpythonでサーバーで端末を呼び出してmysqlに接続するつもりで、やはり中断していませんでした.
Javaが外部スクリプトを呼び出した経験がないので、記録します.
システム外部のプログラムを呼び出す必要がある場合があります.Runtimeを使用することができます.getRuntime().exec()を呼び出し、呼び出しを実行する新しいプロセスを生成します.
このメソッドはjavaを返します.Lang.Processオブジェクトは、以前にオープンしたプロセスの実行結果を得ることができ、プロセスの入出力ストリームを操作することもできます.
Processオブジェクトには、次の方法があります.
1、destroy()このサブプロセスを殺す
2、exitValue()プロセス実行終了後の復帰状態を得る
3、waitFor()はプロセス実行終了後の復帰状態を取得し、プロセスが実行完了していない場合は実行完了を待つ
4、getInputStream()取得プロセスの標準出力情報ストリーム
5.getErrorStream()取得プロセスのエラー出力情報ストリーム
6.getoOutputStream()取得プロセスの入力フロー
スクリプトが簡単なので、簡単なツールクラスを書きました.
path:スクリプトパス
param:スクリプトを実行するパラメータ
public static void runShell(String path,String param){
		try {
		    Process ps = Runtime.getRuntime().exec(path+" "+param);
		    ps.waitFor();
			BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
			StringBuffer sb = new StringBuffer();
			String line;
			while ((line = br.readLine()) != null) {
				sb.append(line).append("
"); } String result = sb.toString(); logger.info(result); } catch (Exception e) { e.printStackTrace(); } }

Runtime.getRuntime().exec()は、python、shellなど、JVM以外のプログラムを実行できます...