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

Windows 64 位環境下 Java 服務部署實戰:Apache Procrun 完整配置指南

     編輯:Java 相關知識

Linux 下 nohup & 一行搞定後台服務,Windows 卻常讓人折騰半天。本文記錄將 Java 應用註冊為 Windows 系統服務的完整實踐,採用 Apache Commons Daemon Procrun (prunsrv),參考 Tomcat 同款方案,穩定、免費、支援 64 位。

為什麼選 Procrun?

  • Apache 項目,Tomcat 官方服務封裝工具,成熟可靠。
  • 支援 64 位 Windows(Wrapper 免費版不支援 64 位)。
  • 純命令行安裝/卸載,適合腳本自動化部署。
  • 提供 GUI 管理工具 prunmgr.exe,可視化調參。

步驟 1:下載與提取核心文件

  1. 訪問 官方歸檔頁,下載 commons-daemon-1.0.8-bin-windows.zip(新版同理)。
  2. 解壓,進入 amd64 目錄(64 位關鍵),複製:
    • prunsrv.exe —— 服務運行核心
    • prunmgr.exe —— 管理監控工具(建議重命名為 YourApp.exe)
  3. 將兩文件放入應用部署目錄(如 D:\myapp\service)。

步驟 2:編寫安裝腳本 install-service.bat

@echo off
set APP_HOME=D:\myapp\service
set JAVA_HOME=C:\Java\jdk1.8.0_301
set LIB_HOME=D:\myapp\lib

%APP_HOME%\prunsrv.exe //IS//MyAppService ^
  --DisplayName="My Application Service" ^
  --Description="Java Application as Windows Service" ^
  --Install=%APP_HOME%\prunsrv.exe ^
  --Jvm=%JAVA_HOME%\jre\bin\server\jvm.dll ^
  --JvmMs=256 --JvmMx=1024 ^
  --StartMode=jvm --Startup=auto --StopMode=jvm ^
  --Classpath=%LIB_HOME%\*;%APP_HOME%\app.jar ^
  --StartClass=com.myapp.Main ^
  --StartParams=arg1;arg2 ^
  --LogPath=%APP_HOME%\logs ^
  --LogPrefix=myapp-service ^
  --LogLevel=Info ^
  --StdOutput=auto --StdError=auto

關鍵參數解析:

  • //IS//MyAppService:安裝服務,名稱唯一標識。
  • --Jvm:指定 jvm.dll 路徑(必須用 server 版,性能更優)。
  • --JvmMs/--JvmMx:初始/最大堆內存(MB)。
  • --StartMode=jvm:進程內啟動 JVM(非新進程),性能最佳。
  • --Classpath:通配符 \* 僅支援 Java 6+,建議顯式列出關鍵 JAR。
  • --Install:必須包含完整路徑 %APP_HOME%\prunsrv.exe,否則報「找不到文件」。

步驟 3:編寫卸載腳本 uninstall-service.bat

@echo off
set APP_HOME=D:\myapp\service
%APP_HOME%\prunsrv.exe //DS//MyAppService

步驟 4:驗證與管理

  1. 以管理員身份運行 install-service.bat。
  2. 打開「服務」(services.msc),尋找 "My Application Service",狀態應為「運行中」。
  3. 雙擊服務名,可調整啟動類型(自動/手動)、恢復動作等。
  4. 運行 prunmgr.exe //MS//MyAppService(或重命名後的 YourApp.exe)啟動 GUI 管理器,可熱修改 JVM 參數、日誌路徑等。

常見坑點避雷

現象原因修正
服務啟動即停止Main 類非 public static void main / 拋出未捕獲異常檢查啟動類簽名,增加 try-catch 並記錄日誌
ClassNotFoundExceptionClasspath 路徑錯誤或缺少依賴 JAR使用絕對路徑,確認通配符生效(Java 6+)
內存參數不生效未指定 --Jvm 導致用默認 client jvm強制指定 --Jvm=%JAVA_HOME%\jre\bin\server\jvm.dll
日志不輸出--LogPath 目錄不存在或無寫入權限預建目錄,授予服務用戶寫入權限

進階:應用內優雅關閉

Procrun --StopMode=jvm 會調用 System.exit(0),建議在應用註冊 ShutdownHook:

Runtime.getRuntime().addShutdownHook(new Thread(() -> {
    // 關閉數據庫連接池、釋放資源、flush 日誌
    logger.info("Service shutting down gracefully...");
}));

官方文檔參考

Apache Commons Daemon Procrun 官方文檔 —— 所有參數權威說明在此。

一次配置,長期受益。用 Procrun 將 Java 應用變身原生 Windows 服務,告別 CMD 窗口常駐,擁抱生產級部署標準。

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