一般来说很少用windows系统来部署java项目,但有时候给别人开发的项目,只有windows电脑进行部署,使用的时候一直有一个黑窗口还有提醒用户不要关闭,实在是太碍事了.所以就考虑到能不能将java项目部署成windows服务,在后台运行,开机自启动.
1.初识WinSW:为何它是SpringBoot Windows部署的优选?
在Windows服务器上部署SpringBoot应用时,直接使用 java -jar 命令运行会面临一个典型问题:启动它的命令行窗口必须始终保持打开,一旦关闭或用户注销,进程就会随之终止。这显然不适合需要长期稳定运行的生产环境。
WinSW(Windows Service Wrapper)正是为解决此类问题而生。它是一个开源工具 ,能将任何可执行程序(包括Java应用)封装为标准的Windows服务
这意味着你的SpringBoot应用可以:
- 在后台静默运行:无需保持用户登录状态
- 实现开机自动启动:确保服务器重启后应用能自行恢复。
- 享受统一的生命周期管理:可以通过Windows服务管理器或简单的命令行进行启动、停止、重启等操作
Spring官方文档也曾推荐使用WinSW在Windows上部署SpringBoot应用
2 部署
2.1 下载
下载地址: https://github.com/winsw/winsw/releases
WinSW 的 GitHub Releases 页面下载必要的文件。你需要根据系统环境选择对应的可执行文件以及一个XML配置模板(通常是 sample-minimal.xml)
准备工作:
- 创建一个专属目录,存放部署文件,例如
D:\MySpringBootService - 将你的SpringBoot Jar包(如
ruoyi-admin.jar)放入该目录 - 将下载的WinSW可执行文件(如
WinSW-x64.exe)和XML样本文件也放入此目录。
2.2 关键的重命名
WinSW要求可执行文件(.exe)与其对应的XML配置文件必须同名。这至关重要
- 将
WinSW.NET4.exe重命名为与你的服务相关的名称,例如RuoyiAdminService.exe - 将
sample-minimal.xml重命名为完全相同的前缀,即RuoyiAdminService.xml
2.3 编写核心的XML配置文件
xml
<service>
<!-- 在Windows系统内部使用的唯一服务ID -->
<id>RuoyiAdminService</id>
<!-- 在服务管理器中显示的名称 -->
<name>Ruoyi Admin Service</name>
<!-- 服务的描述 -->
<description>若依后台管理系统服务(由WinSW驱动)</description>
<!-- 指定Java可执行文件,如果已配置环境变量,直接写"java"即可 -->
<executable>java</executable>
<!-- 传递给Java的命令行参数 -->
<arguments>-Dfile.encoding=UTF-8 -Xms512m -Xmx1024m -jar "ruoyi-admin.jar"</arguments>
<!-- 指定工作目录,%BASE%代表exe文件所在目录 -->
<workingdirectory>%BASE%</workingdirectory>
<!-- 服务启动模式:Automatic(自动), Manual(手动) -->
<startmode>Automatic</startmode>
<!-- 日志配置:日志存放目录 -->
<logpath>%BASE%\logs</logpath>
<!-- 日志模式:rotate为滚动日志,防止单个文件过大 -->
<logmode>rotate</logmode>
</service>
2.4 安装与启动服务
- 安装服务
shell
# 成功后会提示服务器已安装
C:\MySpringBootService\RuoyiAdminService.exe install
- 启动服务
bash
C:\MySpringBootService\RuoyiAdminService.exe start
或者使用系统命令
bash
net start RuoyiAdminService
或者搜索服务在窗口中找到注册的服务RuoyiAdminService
2.5 验证
- 打开 Windows 服务管理器(运行
services.msc),在列表中找到 "Ruoyi Admin Service"。 - 确认其状态是否为"正在运行"。
- 右键可以停止、重启或修改属性(如将启动类型改为"自动")。
3. 服务管理命令大全
| 命令 | 功能 |
|---|---|
| YourService.exe install | 安装服务 |
| YourService.exe start | 启动服务 |
| YourService.exe stop | 停止服务 |
| YourService.exe restart | 重启服务 |
| YourService.exe status | 查看服务状态 |
| YourService.exe uninstall | 卸载服务 |
4. 高级配置与调优
- 使用外部配置文件 :若要将配置文件(如
application.yml)放置在jar包外部,可以在<arguments>中添加-Dspring.config.location=参数指定路径。 - 延迟启动 :如果需要服务在系统启动完毕后再启动,可以添加
<delayedAutoStart/>标签。 - 失败自动重启 :添加
<onfailure action="restart"/>标签,使服务意外停止后能自动重启。
5. 故障排除指南
当服务启动失败时(例如你在对话历史中提到的状态显示为启动成功但进程立即退出),请按以下顺序排查:
- 首要检查点 - 日志文件 :立即查看配置文件中
<logpath>指定的目录(如logs文件夹)。WinSW生成的*.err.log和*.out.log文件,以及SpringBoot应用自身的日志,包含了最直接的错误信息。 - 手动执行测试 :在jar包目录打开CMD,直接运行
java -jar ruoyi-admin.jar。观察控制台输出的错误堆栈,这能精准定位是Java应用自身启动问题(如数据库连不上、端口占用),还是环境问题。 - 核对XML配置 :
- 检查XML格式是否正确,标签是否闭合。
- 确认
<executable>指向的Java路径绝对正确。 - 确保
<id>和<name>与系统现有服务不重复。
- 验证环境:确认系统已安装对应版本的 .NET Framework(运行WinSW所需)和JDK。
6. 总结
通过以上步骤,你已掌握了使用WinSW将SpringBoot Jar包部署为Windows服务的完整流程。从下载重命名、编写配置文件、安装服务到管理排错,整个过程清晰可控。
关键在于:准确的XML配置、通过日志分析问题,以及将不稳定的后台进程转化为可由操作系统托管的标准服务。这让你的SpringBoot应用在Windows服务器上获得了真正的"生产级"运行能力。
掌握这个部署方式后,你可以将更多应用无缝集成到Windows服务器环境中,实现统一、稳定的管理。