通过winsw将SpringBoot可运行jar包做成后台服务,启动运行

时间:2024-03-21 14:43:05

一,背景

因为网络限制,目前开发的一个SpringBoot项目不能部署到Linux设备上,必须要部署到Windows上。在Linux设备上后台启动SpringBoot项目只需要一条命令:nohup sh run.sh &,run.sh脚本包含了启动SpringBoot项目的命令。在windows上后台启动SpringBoot项目貌似就比较尴尬,没有那么好用的命令来后台启动项目,打成war包放到Tomcat等web容器中就浪费了SpringBoot内嵌web容器的优势。在网络上搜肠刮肚一番,最终选择了winsw(https://github.com/kohsuke/winsw/releases),winsw是一个可以将任何应用程序注册成服务的软件。嗯,就是她了,哈哈哈。

二,步骤

a,去上面给出的链接里下载自己所需的文件,选择了最新版本的winsw。主要需要下载两个文件,一个是sample-minimal.xml和WinSW.NET4.exe(WinSW.NET2.exe也行)。

通过winsw将SpringBoot可运行jar包做成后台服务,启动运行

a.+,下载winsw后,在window上安装 .net framework4 ,否则后面会出问题。(很重要)

b,SpringBoot项目通过执行mvn clean package命令后得到可执行jar包:statement-0.0.1-SNAPSHOT.jar。

c,将sample-minimal.xml和WinSW.NET4.exe改为statement-0.0.1-SNAPSHOT.xml和statement-0.0.1-SNAPSHOT.exe,文件名保持一致,方便后续操作。(jar包、.exe文件、.xml文件均在同一目录下

d,在statement-0.0.1-SNAPSHOT.xml文件中<configuration>标签内进行相关配置,如下。

<configuration>
  
  <!-- ID of the service. It should be unique accross the Windows system-->
  <!--服务ID:启动、关闭、删除服务时,都是通过ID来操作的-->
  <id>statement-0.0.1-SNAPSHOT</id>
  <!-- Display name of the service -->
  <!--服务名称-->
  <name>statement-0.0.1-SNAPSHOT (powered by WinSW)</name>
  <!-- Service description -->
  <!--服务描述-->
  <description>This service is a service for Statement Project(http://www.eachtravel.com/)</description>
  
  <!-- Path to the executable, which should be started -->
  <!--当前电脑配置了java环境变量,直接写成“java”就行;你也可以写成类似这样:D:\develop\jdk1.8\jre\bin\java-->
  <executable>java</executable>
  
  <!--启动参数-->
  <arguments>-jar statement-0.0.1-SNAPSHOT.jar</arguments>
  <!--<arguments>-jar "C:\Users\Administrator\Desktop\winsw\statement-0.0.1-SNAPSHOT.jar"</arguments>-->
  <!--日志配置-->
  <logmode>rotate</logmode>
 
  
</configuration>

e,到此就完成了配置,可以安装并启动服务了

e1,进入到三个文件的目标目录(比如target),执行命令:statement-0.0.1-SNAPSHOT.exe install,安装服务。

e2,安装服务成功后,通过命令:net start statement-0.0.1-SNAPSHOT(服务ID)启动服务。

通过winsw将SpringBoot可运行jar包做成后台服务,启动运行

当然,也可以通过在开始那里输入:services.msc命令直接进入服务界面,通过服务ID找到服务,然后手动启动。

 通过winsw将SpringBoot可运行jar包做成后台服务,启动运行

e3,通过命令:net stop statement-0.0.1-SNAPSHOT 停止服务,或者是直接去服务界面手动停止服务。

e4,停止服务后,可通过:sc delete ServiceName删除服务

通过winsw将SpringBoot可运行jar包做成后台服务,启动运行

e4,查找windows service的PID:SC queryex service_name

通过winsw将SpringBoot可运行jar包做成后台服务,启动运行

三,总结 

虽然不难,但还是捣鼓了好久,哈哈,记录下来,留个纪念!