要件:
ES検出ポートは、プログラムの初期化での使用には、ケースは再びプロセスがポートが占有されていない場合は、ESを起動しているESのポートを使用しているかどうかを裁判官に占領されたされていません。
ロジック:
ケース1:初期化 - >占有検出ポート - >すでに使用されている - > ES検出オープンかどうか - >投入 - >リターン
ケース2:初期化 - >占有検出ポート - >空い - > ESオン
ケース3:初期化 - >占有検出ポート - >それはすでに使用されている - >未開封 - - > ES上> ESオープンかどうかを検出
占有検出ポート// ポートアドレスを使用して//ソケット接続、ポートを証明するために接続することができますが占有されている パブリックブールPortState(){ 空いための偽//占有、 ; falseにブール=国家 試し{ 接続を作成する//試みを ソケットソケット新しい新しい=ソケット(「127.0.0.1」、9200); //が占有されていない場所をスローし、結果が返された 状態がtrueに=; 状態を返す; }キャッチ(IOExceptionをE){ System.out.printlnは(「ポートはありません!職業は、)ES」を開始しようとしている } reurn州; } //開始ESかどうかを検出する アドレス// ESは、9200の開始にアクセスすることができます 。//をので、アクセスしたURLアドレスを使用して 判断する返された文字列受信// パブリックブール{)(isRunning 、開始されていないため、偽開始// falseにブール=状態; 試み{ //アクセスアドレスES URLのURL =新しい( "http://127.0.0.1:9200" )URLを。 //アクセス }キャッチ(IOExceptionをE){ URLC = url.openConnectiom URLConnectionの(); //結果を読み取り、符号化フォーマットの結果を設定するために入力ストリームを作成 InputStreamReaderの新しい新しいISR =(urlc.getInputStream()、 "GBK")InputStremReader; BufferedReaderのBR =新しい新しいBufferedReaderの(ISR ); //結果を受け、決定 文字列に結果を= NULL; !しばらく((br.readLine結果=())= NULL){ //この条件があるので、私の名前のESこの 場合(result.indexOf(「elasticsearch ")> 0){ //状態の変化は、サイクルの終わり をtrueに状態=; System.out.printlnはは("!ESはすでに「開始) BREAK; } } //解放資源 br.closeを(); isr.closeを() ; }キャッチ(例外:MalformedURLException E){ e.printStackTrace(); e.printStackTrace(); } ;州立リターンは } 申し訳ありませんが、私は可能性が低い、このようなものをVBSバットを呼び出してCMDウィンドウを非表示に使用されるESのVBSスクリプトを起動する// 次のようにVBSを読み込む 設定WS =のCreateObject(「Wscript.Shell」) // D :\ ES \ビン\のelasticsearch.batは:これは私がESの起動パスバットで ws.run "CMD / CのDを:\ ES \ビン\のelasticsearch.bat"、0 // ESメソッドを起動し ます。public void startES(){ //ファイルパス、デバッグを容易にするために 文字ファイルパス= "D:/ ES /"を、 試み{ // VBS実行 プロセスのプロセスRuntime.getRuntime =()をExecの( "cmd.exeの/c"+filePath+"startES.vbsを")。 ; }キャス(IOExceptionをE){ e.printStackTrace(); } } //集積ロジックが決定 公共execSubBootボイド(){ System.out.printlnは( "開始する準備ができてESを...") //ポートの状態が決定される 場合(isRunning()){ 場合(portState()){ //は、ESの状態を判断 //戻り開始 リターンを; } System.err.println( "ポートが占有されている!"); 戻り; } startES(); System.out.printlnはは( "ESが正常に開始されました!"); }