利用Apache Commons Daemon将jar包注册为windows服务
文章目录
注:假定jar包名为 pure-demo-0.0.1.jar ,服务名为 test-jar-server,其启动命令为:
java -Dfile.encoding=utf-8 -Xms256m -Xmx256m -jar pure-demo-0.0.1.jar --spring.profiles.active=dev
一、创建文件目录
将jar包 pure-demo-0.0.1.jar 放到 libs
目录下
二、下载Apache Commons Daemon
① 下载 commons-daemon-1.2.4-bin-windows.zip,解压得到 prunsrv.exe
(区分32位和64位) 和 prunmgr.exe
,复制到 bin 目录下。
prunsrv.exe:以控制台方式启动服务器。
prunmgr.exe:编辑服务相关参数,以可视化窗口方式启动服务。
② 重命名(对应服务名) prunsrv.exe
为 test-jar-server.exe, prunmgr.exe
为 test-jar-serverw.exe。
三、编辑相关脚本
installService.bat
@echo off
rem 设置程序名称
set SERVICE_EN_NAME=test-jar-server
set SERVICE_CH_NAME=测试jar服务
set SERVICE_CH_DESC=测试jar包是否可以注册为服务
rem 设置java路径
set JAVA_HOME=%JAVA_HOME%
rem 设置程序依赖及程序入口类,START_PARAM是设置springboot的传参以 '#' 或 ';'
cd..
set BASEDIR=%CD%
set CLASSPATH=%BASEDIR%\libs\pure-demo-0.0.1.jar
set MAIN_CLASS=org.springframework.boot.loader.JarLauncher
set START_PARAM=--spring.profiles.active=dev
set STOP_CLASS=org.springframework.boot.loader.JarLauncher
rem 设置prunsrv路径
set SRV=%BASEDIR%\bin\test-jar-server.exe
rem 设置日志路径及日志文件前缀
set LOGPATH=%BASEDIR%\logs
rem 输出信息
echo SERVICE_NAME: %SERVICE_EN_NAME%
echo JAVA_HOME: %JAVA_HOME%
echo MAIN_CLASS: %MAIN_CLASS%
echo prunsrv path: %SRV%
rem 设置jvm
if "%JVM%" == "" goto findJvm
if exist "%JVM%" goto foundJvm
:findJvm
set "JVM=%JAVA_HOME%\jre\bin\server\jvm.dll"
if exist "%JVM%" goto foundJvm
echo can not find jvm.dll automatically,
echo please use COMMAND to localation it
echo then install service
goto end
:foundJvm
echo 正在安装服务...
rem 安装
rem 注:^ 换行
"%SRV%" //IS//%SERVICE_EN_NAME% ^
--DisplayName="%SERVICE_CH_NAME%" ^
--Description="%SERVICE_CH_DESC%" ^
--Install="%SRV%" ^
--Classpath="%CLASSPATH%" ^
--JavaHome="%JAVA_HOME%" ^
--Jvm="%JVM%" ^
--JvmMs=256 ^
--JvmMx=1024 ^
--Startup=auto ^
--JvmOptions=-Djcifs.smb.client.dfs.disabled=false ^
++JvmOptions=-Djcifs.resolveOrder=DNS ^
++JvmOptions=-Dfile.encoding=utf-8 ^
--StartMode=jvm ^
--StartClass=%MAIN_CLASS% ^
--StartMethod=main ^
++StartParams="%START_PARAM%" ^
--StopMode=jvm ^
--StopClass=%STOP_CLASS% ^
--StopMethod=exit ^
--StopParams= ^
--LogPath=%LOGPATH% ^
--StdOutput=auto ^
--StdError=auto ^
--PidFile=%LOGPATH%\pid
echo 安装服务完成。
pause
uninstallService.bat
@echo off
cd..
set basedir=%CD%
set SERVICE_NAME=test-jar-server
set SRV=%BASEDIR%\bin\test-jar-server.exe
echo 正在卸载服务...
"%SRV%" //DS//%SERVICE_NAME%
echo 服务卸载完毕。
pause
shutdownService.bat
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
setlocal enabledelayedexpansion
@echo off
chcp 65001
ref 程序的端口
set port=8084
for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do taskkill /f /pid %%m
pause
四、安装服务与启动
运行 installService.bat
然后启动服务,在logs下可查看日志
五、注意事项
由于测试jar包内没写 stop
方法,本方法采用的shi脚本方式关闭服务(通过寻找并kill 端口对应的pid)。
如果要实现在如下界面停止
可以采用如下方案:
- 代码中添加stop方法
public static void stop(String[] args) {
System.exit(0);
}
- 双击运行
test-jar-serverw.exe
来配置ShutDown标签页下的类和方法