首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

使用 Java Service Wrapper 將 Java 程式註冊為系統服務

     編輯:Java 相關知識

工具簡介

Java Service Wrapper 提供跨平台(Windows、Linux、Unix)將 Java 應用程式安裝為系統服務/守護進程的能力。

三種整合方式

  1. WrapperSimpleApp:最簡單、官方推薦。需修改程式啟動類,適合專案早期引入。JBoss 採用此方式。
  2. WrapperStartStopApp:適用於啟動/停止邏輯分離於不同類(ClassA 啟動、ClassB 停止)的場景。
  3. 實現 WrapperListener 接口(本文重點):對程式碼侵入性最小,僅需啟動類實現 start(String[])、stop(String[]),配置靈活,適合已有專案整合。

第三種方式實作步驟

1. 實現 WrapperListener

public class MyService implements WrapperListener {
    public Integer start(String[] args) {
        // 初始化應用(如啟動 Spring 容器)
        return null; // 非零表示啟動失敗
    }
    public int stop(int code) {
        // 優雅關閉資源
        return code;
    }
    public void controlEvent(int event) { /* 處理服務控制事件 */ }
}

注意:start 需在 30 秒內完成,耗時操作請放入獨立執行緒;若拋出異常將導致服務啟動終止。

2. 配置 wrapper.conf

關鍵屬性說明:

屬性說明
wrapper.java.commandJava 執行檔路徑(可指定完整 JDK bin 路徑)
wrapper.java.mainclass實現 WrapperListener 的啟動類全名
wrapper.java.classpath.1類路徑,從 1 開始連續編號,支援通配符 *(僅匹配檔名)
wrapper.java.library.path.1原生庫目錄(如 Wrapper.dll)
wrapper.ntservice.name系統服務名稱(唯一標識)
wrapper.ntservice.displayname服務管理器顯示名稱
wrapper.ntservice.starttypeAUTO_START(自動)或 DEMAND_START(手動)
wrapper.logfile.maxsize日誌最大尺寸,0=不限制,支援 k/m 單位

3. 動態更新類路徑(RCP 專案實例)

專案具自動更新功能,插件版本變更會導致類路徑失效。解決方案:編寫管理類定期掃描最新插件路徑,重寫 wrapper.conf 中的 wrapper.java.classpath.*,確保服務重啟時載入最新版本。

Jetty 實戰參考

Jetty 同樣採用第三種方式,其 JettyServiceWrapperListener 實現了 start 調用 Main.main、stop 呼叫 Server.stop(),並透過 WrapperManager.start 啟動服務,可作為範本參考。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved