Java程序注册Windows服务、Springboot项目注册windows服务的几种方式
三种方法:
1、利用JAVA Service Wrapper
缺点:官方分专业版、标准版和社区版,64位没有社区版,非社区版收费;
2、使用WinSW,
地址:http://repo.jenkins-ci.org/releases/com/sun/winsw/winsw/
缺点:需要.Net运行环境支持
优点:网上资料很多,简单,稳定可靠;
3、使用Apache的Procrun(重点解决windows服务不能正常停止问题)
地址:http://commons.apache.org/proper/commons-daemon/procrun.html
优点:tomcat使用的就是这个,稳定可靠,网上资料也不少,不依赖任何环境,有任务栏通知图标
本文重点介绍第三种方案
Apache的Procrun
依据JDK版本使用不同的服务程序,根目录的服务程序时32位的
管理UI程序需要改名,名字和windows服务相同,必须是英文ID
目录结构图
我的服务ID是vpm-gather_x64,上面的都比较简单,主要是脚本怎么写,直接上脚本:
编写安装脚本:运行时必须使用管理员权限
@echo off
cd /d "%~dp0"
rem 设置服务ID,使用当前目录名
for /f "delims=" %%i in ("%cd%") do set SERVICE_ID=%%~ni
echo SERVICE_ID: %SERVICE_ID%
rem 设置程序名称
set SERVICE_NAME=管理服务(服务中文名)
set SERVICE_DESC=服务中文描述。
rem 设置程序依赖及程序入口类
set BASE_HOME=%CD%
echo BASE_HOME: %BASE_HOME%
rem 自动识别jar包,本目录只能存在一个jar包
for /f "delims=" %%i in ('dir /b *.jar') do set JAR_FILE=%%i
set CLASSPATH=%BASE_HOME%\%JAR_FILE%
echo JAR_FILE: %CLASSPATH%
set MAIN_CLASS=org.springframework.boot.loader.JarLauncher
rem 设置prunsrv路径
set SRV=%BASE_HOME%\prunsrv.exe
echo SRV: %SRV%
rem 设置日志路径及日志文件前缀
set LOGPATH=%BASE_HOME%\logs
rem 设置jvm
if "%JVM%" == "" goto findJvm
if exist "%JVM%" goto foundJvm
:findJvm
set "JVM=%BASE_HOME%\jre\bin\server\jvm.dll"
echo JVM: %JVM%
if exist "%JVM%" goto foundJvm
echo 没有找到JVM,请确认安装包是否完整。
goto end
:foun