利用Apache Commons Daemon将jar包注册为windows服务

利用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.exetest-jar-server.exeprunmgr.exetest-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)。
如果要实现在如下界面停止
服务
可以采用如下方案:

  1. 代码中添加stop方法
public static void stop(String[] args) {
       System.exit(0);
 }
  1. 双击运行 test-jar-serverw.exe 来配置ShutDown标签页下的类和方法
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值