需求缘起
有网易云课堂的小伙伴提问:“我想要在Windows 服务器上 当做服务来运行的”。在windows系统上如果使用jar运行的话,想必这个大家都会,但是如果要以服务的形式的话,那么应该有些小伙伴还不清楚吧,本篇文章为你解惑。
说明
在linux下部署Spring Boot项目是一件很简单的事,直接后台运行就行了,最多写个shell脚本开机自启就行了。在windows上运行jar有一个问题,运行的时候会弹出一个cmd窗口,并且不能关闭,关闭的话程序就停止了。那么在windows下以服务的方式进行运行呢,Spring官方网站推荐使用winsw来将Spring Boot项目做为务运行,参考地址:
https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#deployment-windows
安装使用
(1)下载winswexe文件
从github上进行下载,下载地址:
https://github.com/kohsuke/winsw/releases
我这里下载的是最新版本winsw-v2.2.0,这里有两个要下载的文件:其一winsw.exe文件; 其二是xml配置文件。我下载的是最新版本的WinSW.NET4.exe和sample-minimal.xml。
(1)sample-minimal.xml:配置window服务信息、可执行程序、参数。
(2)WinSW.NET4.exe:是安装/卸载windows服务的exe文件。
题外话:下载地址的WinSW.NET4和WinSW.NET2是什么鬼?
(1)NET是window下的netframework的简称。
(2).netframework2.0选择 WinSW.NET2.exe;.netframework4.0 选择WinSW.NET4.exe。
(3)怎么查看自己系统上的netframework的最高版本号呐?特别简单,直接打开【我的电脑】- 在地址栏输入【%systemroot%\Microsoft.Net\Framework】就可以看到多个版本,当中的最高版本就是我们目前正在使用的.net Framework的版本号。
(2)修改配置
将winsw执行程序跟xml改成同样的名字,推荐使用项目名-service的命名方式,比如:WinSW.NET4.exe改成springboot-service.exe,sample-minmal.xml改成springboot-service.xml:
改名完成后,编辑spring-bootService.xml文件,配置如下图:
<configuration>
<!-- 安装成windows服务后的服务名 -->
<id>spring-boot-hello</id>
<!--显示的服务名称 -->
<name>spring-boot-hello</name>
<!-- 对服务的描述 -->
<description>spring boot hello 例子</description>
<!-- 可执行程序。这里写java的路径(如果配置了环境变量,直接写“java”即可) -->
<executable>java</executable>
<arguments>-jarspring-boot-hello.jar</arguments>
</configuration>
(3)安装服务
配置完成后,命令行进入winsw所在的文件夹,执行“spring-boot-hello-service.exeinstall”,其中spring-boot-hello-service是你修改后的名称。注意:命令提示符界面要用管理员权限进入,否则安装服务会失败,提示“WMI Operation failure: AccessDenied”
安装成功如下:
(4)服务启动和关闭
服务的启动:net startspring-boot-service
服务的关闭:net stopspring-boot-service
(5)服务删除
删除服务分为两步:1停止服务;2删除服务,都是在命令行界面实现。
输入“net stop spring-boot-hello”停止运行服务。
输入“spring-boot-hello-service.exeuninstall”删除服务。