目标:使用Spring Boot开发的Web项目,打包生成了jar包,部署在Windows服务器中,设置为开机启动
注意:windows服务器要安装java环境!!!
之前可以想到的一般方案:
1、Spring Boot生成的jar包,可以直接用java -jar运行,但是前提是需要登录用户,关掉cmd窗口程序就会停止,而且注销用户后会退出程序,所以不可用。
2、使用计划任务,写一个bat处理文件,里面写java -jar运行程序,然后把bat文件作为一个计划任务运行;结果可能是因为任务启动时,系统资源未准备好,所以没有成功。
最佳方案:WinSW
WinSW是一个可以将任何应用程序注册成服务的软件,程序以及源码都开源了,可以在GitHub下载:GitHub - winsw/winsw: A wrapper executable that can run any executable as a Windows service, in a permissive license.https://github.com/winsw/winsw
1.下载WinSW
目前最新版本是3,与版本2使用方式不同,由于参考网上其他人的教程,选择了2的最新版本v2.11.0,下载地址为
GitHub - winsw/winsw at v2.11.0https://github.com/winsw/winsw/tree/v2.11.0
将GitHub中下载的WinSW-x64.exe和sample-minimal.xml文件及项目的jar包放在同一个文件夹中
2.将WinSW执行程序跟xml改成同样的名字
推荐使用项目名+Service的命名方式,比如:WinSW-x64.exe改成mesService.exe,sample-minmal.xml改成mesService.xml。
3.编辑mesService.xml文件
内容如下
<!--
这是一个最小的Windows Service Wrapper配置示例,其中仅包含强制选项。
此配置文件应放在WinSW可执行文件附近,名称应相同。
例如:对于myapp.exe,配置文件名应该是myapp.xml
您可以在此处找到有关配置选项的更多信息: https://github.com/kohsuke/winsw/blob/master/doc/xmlConfigFile.md
完整示例: https://github.com/kohsuke/winsw/blob/master/examples/sample-allOptions.xml
-->
<service>
<!-- 服务id,它在Windows 系统中应该是唯一的-->
<id>ygs-mes-service</id>
<!-- 服务的显示名称 -->
<name>ygs-mes-service</name>
<!-- 服务说明 -->
<description>某某某MES服务端(Java)</description>
<!-- 应该启动的可执行文件的路径,配置了环境变量写java就行 -->
<executable>java</executable>
<!--Xms256m 代表堆内存初始化大小为256MB Xmx256m 代表堆内存最大值为256MB -jar后面的是项目jar包名-->
<arguments>-Xms256m -Xmx256m -jar mes-server-1.0-SNAPSHOT.jar</arguments>
<!--日志模式 none不打印项目的控制台输出(减轻硬盘压力),其他模式请参考官方文档
https://github.com/winsw/winsw/blob/v2.11.0/doc/loggingAndErrorReporting.md-->
<logmode>none</logmode>
</service>
4.打开系统服务功能
运行——输入cmd,然后进入到mesService.exe所在文件夹,然后执行命令安装服务:mesService.exe install。
5.启动服务
以管理员身份在命令提示符界面输入命令 net start ygs-mes-service(服务名)启动服务。
或者也可以运行->输入services.msc,搜索找到自己命名的服务ygs-mes-service。在服务管理中启动服务
可以看到服务状态变为正在运行,说明启动成功
服务启动后,可以看到生成服务运行日志文件xx.wrapper.log(app-log是我jar项目配置的日志文件,不是winsw生成的)
打开可以看到类似如下内容
6.停止并删除服务
分为两步:1停止服务(需要管理员权限);2删除服务,都是在命令行界面实现。
删除后可以从windosw服务中心看到,服务确实被卸载了。
7.写批处理文件
目的:部署的时候实现一键部署
start.bat内容如下:
mesService.exe install
net start ygs-mes-service
stop.bat内容如下:
net stop ygs-mes-service
mesService.exe uninstall
如果服务器上本身登录的就是管理员,双击bat运行即可(如果提示找不到命令,可能是管理员权限问题)
附录:WinSW服务常用命令
windows启动服务:net start xxxProjectService
windows停止服务: net stop xxxProjectService
卸载服务:xxService.exe uninstall
安装服务:xxService.exe install
更多命令请参考官方文档
参考链接:如何将Spring Boot项目部署为Windows服务,并设置开机启动 - 简书https://www.jianshu.com/p/af90db4b54e3