程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 判斷Wrapper Service注冊的服務是否啟動

判斷Wrapper Service注冊的服務是否啟動

編輯:關於JAVA

在我以前的一篇文章中介紹了使用Apache Wrapper Service這個工具將Java程序注冊成操作系統的服務,如果你采用”實現WrapperListener這個接口並結合wrapper.conf” 這種方式來啟動服務,而且在wrapper.conf配置文件中將wrapper.ignore_signals屬性設置為true,Wrapper Service提供的API是無法正確的判斷服務是否正常的啟動,因為wrapper.ignore_signals屬性用來屏蔽操作系統的消息機制,比如在啟動服務的命令行窗口按Ctrl+C或者關閉啟動服務的命令行窗口的時候,服務也不會停止,這樣可以防止誤操作。

其實在Wrapper Service這個工具是通過Socket和JVM進行通信(順便說一下,這樣服務能否正常啟動可能會受到本機防火牆的影響,我碰到過這種情況),在 Wrapper Service的配置文件中可以指定服務使用的端口(默認為隨機選擇端口,這樣很不可靠),這樣的話可以通過Java的Socket來判斷服務是否可以正常的啟動.

比如我們的服務使用的端口是3976,判斷的Java代碼是:

/**
    * 檢查服務器連接狀態。
    * @author vwpolo
    * @return String
    */
   private String getWrapperServiceState() {
     try {
       InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1",3976);
       Socket socket = new Socket();
       socket.connect(socketAddress,60000);
       return "已啟動";
     }catch (Exception e) {
       return "已經停止";
     }
   }

測試代碼:

System.out.println("服務啟動狀態: "+ getWrapperServiceState());

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved