2016-03-28 47 views
0

我正在爲Stilts stomp server做一些Poc。需要防止服務器jvm終止並通過另一個jvm來完成。這裏是一個代碼片段從命令行停止jvm優雅關閉

public static void main(String[] args) { 
    try { 
     log.debug("Starting server..."); 
     StompServer<MockStompProvider> server = new StompServer<MockStompProvider>(); 
     server.setStompProvider(new MockStompProvider()); 
     server.addConnector(new InsecureConnector()); 
     server.start(); 
     while (true) { 
      Thread.sleep(200000); 
     } 
    } catch (Exception ex) { 
     log.error("Exception ", ex); 
    } 
} 

有兩個要求。

  1. 是否有任何其他方式來防止終止上述jvm而不使用while循環。
  2. 我想停止使用類似java -jar server.jar -- stop的命令jvm,例如jetty之類的服務器。碼頭使用端口並監聽停止請求的信號。有沒有簡單的方法。

第二個選項之一可以使用AnchorFile,在啓動jvm時創建文件並監視文件是否存在,並使用stop jvm刪除該文件。

回答

1

你可以

static final int PORT = Integer.getInteger("port", 65432); 
public static void main(String[] args) { 
    if (args.length > 0) { 
     new Socket("localhost", PORT); 
     return; 
    } 

    try { 
     log.debug("Starting server..."); 
     StompServer<MockStompProvider> server = new StompServer<MockStompProvider>(); 
     server.setStompProvider(new MockStompProvider()); 
     server.addConnector(new InsecureConnector()); 
     server.start(); 
     new ServerSocket(PORT).accept(); 

    } catch (Exception ex) { 
     log.error("Exception ", ex); 
    } 
} 
+0

弓做到這一點與ServerSocket的給你弟弟。 – vels4j

+0

@ vels4j可以改善錯誤處理。例如檢測到該服務已在運行,並且如果您沒有正在運行的服務而停止,則會發出合理的錯誤。注意:如果你從任何機器連接(你可以檢查源IP),這將停止。 –

+0

是的,我正在做所有的地面工程。非常感謝.. – vels4j