Java Service Wrapper 提供跨平台(Windows、Linux、Unix)將 Java 應用程式安裝為系統服務/守護進程的能力。
start(String[])、stop(String[]),配置靈活,適合已有專案整合。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 秒內完成,耗時操作請放入獨立執行緒;若拋出異常將導致服務啟動終止。
關鍵屬性說明:
| 屬性 | 說明 |
|---|---|
| wrapper.java.command | Java 執行檔路徑(可指定完整 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.starttype | AUTO_START(自動)或 DEMAND_START(手動) |
| wrapper.logfile.maxsize | 日誌最大尺寸,0=不限制,支援 k/m 單位 |
專案具自動更新功能,插件版本變更會導致類路徑失效。解決方案:編寫管理類定期掃描最新插件路徑,重寫 wrapper.conf 中的 wrapper.java.classpath.*,確保服務重啟時載入最新版本。
Jetty 同樣採用第三種方式,其 JettyServiceWrapperListener 實現了 start 調用 Main.main、stop 呼叫 Server.stop(),並透過 WrapperManager.start 啟動服務,可作為範本參考。