以前有记录过使用 .bat文件方式来完成
windows环境下后台运行jar包

步骤相对比较麻烦,后期维护也不方便。这里我新了解到了一些工具 winsw、nssm,它们都可以更为方便在windows环境下去运行jar。

这里主要讲解 winsw 使用方式,nssm 工具使用方式也很容易,可以自行百度。

一、背景

因为网络限制,目前开发的一个SpringBoot项目不能部署到Linux设备上,必须要部署到Windows上。

在Linux上,后台启动SpringBoot项目只需要一条命令:nohup sh run.sh &,run.sh脚本包含了启动SpringBoot项目的命令。

在windows上,后台启动SpringBoot项目貌似就比较尴尬,没有那么好用的命令来后台启动项目。有着以下的缺点:

  1. 需要打开命令行窗口输入命令行才可运行,很不方便(或需要编写.bat文件)
  2. 需要停止程序时只能在任务管理器中结束,并且多个这样程序运行时无法从进程名中进行区分(或需要编写.bat文件)
  3. 服务启重启后,程序无法实现自启动
  4. 打成war包放到Tomcat等web容器中就浪费了SpringBoot内嵌web容器的优势。

为了改善以上缺点,所以使用winsw将springboot部署成Windows服务。

二、winsw简介

winsw 是一个可以将任何应用程序注册成服务的软件。下载地址:winsw

注意:在安装winsw前,window要有 .net framework4 ,否则后面会出问题。(现在电脑都有,可以查看一下版本)

2.1 如何查看.net版本

进入C:\Windows\Microsoft.NET\Framework

.net版本

2.2 下载winsw

打开下载地址,下载2.11.0版。

现在是2022.6.29,现在最新版为2.11.0,网页中3.0.0为预发布。

下载winsw

2.3 打包jar

SpringBoot项目通过执行mvn clean package命令后得到可执行jar包:test-0.0.1.jar。(测试用,具体名称在pom.xml文件中定义)

2.4 修改下载的winsw文件

sample-minimal.xmlWinSW.NET4.exe 改为 test-0.0.1.xmltest-0.0.1.exe ,文件名保持一致,方便后续操作。(jar包、.exe文件、.xml文件均在同一目录下)
如:

1
2
3
4
5
创建一个test目录,将jar包、.exe文件、.xml文件均在放在test目录下
-test
--test-0.0.1.xml
--test-0.0.1.exe
--test-0.0.1.jar

2.5 修改test-0.0.1.xml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<configuration>

<!-- ID of the service. It should be unique accross the Windows system-->
<!--服务ID:启动、关闭、删除服务时,都是通过ID来操作的-->
<id>test-0.0.1</id>
<!-- Display name of the service -->
<!--服务名称-->
<name>test-0.0.1 (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 test-0.0.1.jar</arguments>
<!--<arguments>-jar "C:\Users\Administrator\Desktop\winsw\statement-0.0.1-SNAPSHOT.jar"</arguments>-->

<!-- 日志地址 -->
<logpath>%BASE%\log</logpath>
<!-- 日志模式 -->
<logmode>rotate</logmode>

</configuration>

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

2.6 安装、删除、启动、停止服务

为了方便以后不用老是打指令可以编写4个.bat文件

进入到三个文件的目标目录,我这里就是进入test目录下,分别创建stop.batstart.bat服务删除.bat服务注册.bat

目录结构:

1
2
3
4
5
6
7
8
-test
--test-0.0.1.xml
--test-0.0.1.exe
--test-0.0.1.jar
--start.bat
--stop.bat
--服务删除.bat
--服务注册.bat

start.bat文件内容(启动)版本

1
net start test-0.0.1

stop.bat文件内容(停止)

1
net stop test-0.0.1

服务删除.bat文件内容

1
sc delete test-0.0.1

服务注册.bat文件内容

1
test-0.0.1.exe install

2.7 运行

  1. 先点击服务注册.bat
  2. 安装注册成功后,我们点击start.bat来启动服务。当然,也可以通过在cmd命令行那里输入:services.msc命令直接进入服务界面,通过服务ID找到服务,然后手动启动。
  3. 启动服务成功后,就可以访问项目了。
  4. 点击stop.bat来停止服务。
  5. 点击服务删除.bat来删除服务。