【Java】使用WinSW将SpringBoot Jar包部署为Windows服务

一般来说很少用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)

准备工作:

  1. 创建一个专属目录,存放部署文件,例如D:\MySpringBootService
  2. 将你的SpringBoot Jar包(如 ruoyi-admin.jar)放入该目录
  3. 将下载的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 安装与启动服务

  1. 安装服务
shell 复制代码
# 成功后会提示服务器已安装
C:\MySpringBootService\RuoyiAdminService.exe install
  1. 启动服务
bash 复制代码
C:\MySpringBootService\RuoyiAdminService.exe start

或者使用系统命令

bash 复制代码
net start RuoyiAdminService

或者搜索服务在窗口中找到注册的服务RuoyiAdminService

2.5 验证

  1. 打开 Windows 服务管理器(运行 services.msc),在列表中找到 "Ruoyi Admin Service"。
  2. 确认其状态是否为"正在运行"。
  3. 右键可以停止、重启或修改属性(如将启动类型改为"自动")。

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. 故障排除指南

当服务启动失败时(例如你在对话历史中提到的状态显示为启动成功但进程立即退出),请按以下顺序排查:

  1. 首要检查点 - 日志文件 :立即查看配置文件中 <logpath> 指定的目录(如 logs 文件夹)。WinSW生成的 *.err.log *.out.log 文件,以及SpringBoot应用自身的日志,包含了最直接的错误信息。
  2. 手动执行测试 :在jar包目录打开CMD,直接运行 java -jar ruoyi-admin.jar。观察控制台输出的错误堆栈,这能精准定位是Java应用自身启动问题(如数据库连不上、端口占用),还是环境问题。
  3. 核对XML配置 :
    • 检查XML格式是否正确,标签是否闭合。
    • 确认 <executable> 指向的Java路径绝对正确。
    • 确保 <id><name> 与系统现有服务不重复。
  4. 验证环境:确认系统已安装对应版本的 .NET Framework(运行WinSW所需)和JDK。

6. 总结

通过以上步骤,你已掌握了使用WinSW将SpringBoot Jar包部署为Windows服务的完整流程。从下载重命名、编写配置文件、安装服务到管理排错,整个过程清晰可控。

关键在于:准确的XML配置、通过日志分析问题,以及将不稳定的后台进程转化为可由操作系统托管的标准服务。这让你的SpringBoot应用在Windows服务器上获得了真正的"生产级"运行能力。

掌握这个部署方式后,你可以将更多应用无缝集成到Windows服务器环境中,实现统一、稳定的管理。

相关推荐
budingxiaomoli9 小时前
Spring IoC &DI
java·spring·ioc·di
Spider Cat 蜘蛛猫9 小时前
Springboot SSO系统设计文档
java·spring boot·后端
未若君雅裁9 小时前
MySQL高可用与扩展-主从复制读写分离分库分表
java·数据库·mysql
学习中.........10 小时前
从扰动函数的变化,感受红黑树带来的性能提升
java
计算机安禾10 小时前
【c++面向对象编程】第24篇:类型转换运算符:自定义隐式转换与explicit
java·c++·算法
weixin1997010801611 小时前
【保姆级教程】淘宝/天猫商品详情 API(item_get)接入指南:Python/Java/PHP 调用示例与 JSON 返回值解析
java·python·php
环流_11 小时前
redis核心数据类型在java中的操作
java·数据库·redis
雨辰AI11 小时前
SpringBoot3 项目国产化改造完整流程|从 MySQL 到人大金仓落地
java·数据库·后端·mysql·政务
带刺的坐椅11 小时前
Java 流程编排新范式 Solon Flow:一个引擎,七种节点,覆盖规则/任务/工作流/AI 编排全场景
java·spring·ai·solon·flow
知彼解己11 小时前
Arthas:Java生产环境问题排查利器,从入门到实战
java