Spring Boot在Windows开机自启动

把 Spring Boot 的 jar 在 Windows 开机时自动启动,有几种常用且可靠的方法。

按从简单到专业排序:任务计划(Task Scheduler) 、把 jar 注册为 Windows 服务(推荐用 NSSM 或 winsw) 、以及直接用 sc create。下面给出每种方法的步骤、示例命令和注意事项。

只需把示例中的 java 路径和 C:\path\to\app.jar 替换成你自己的路径即可。

1) 最简单:使用「任务计划程序」(开机/登录时启动)

适合快速部署、调试。优点:不需要额外工具;缺点:不是严格的服务管理(重启/崩溃自动恢复能力弱)。

  1. 在记事本建一个启动脚本 start-app.bat:
bat 复制代码
@echo off
cd /d "C:\path\to"
REM 可加 JVM 参数:-Xms256m -Xmx1g
"C:\Program Files\Java\jdk-17\bin\java.exe" -jar "C:\path\to\app.jar" >> "C:\path\to\logs\app.log" 2>&1
  1. 打开「任务计划程序」→ 右侧「创建任务」:

    • 常规:勾选"使用最高权限运行",配置为"无论用户是否登录都运行"。
    • 触发器:新建 → "在计算机启动时"。
    • 操作:新建 → 程序/脚本 指向 start-app.bat(或直接指定 java.exe 并把参数写入"添加参数")。
    • 条件/设置:取消勾选"只有在计算机使用交流电源供电时",勾选"如果任务失败,则重新启动每 X 分钟"。
  2. 保存后可以在任务计划程序里右键运行测试,重启机器验证。

2) 推荐:把 jar 注册为 Windows 服务(使用 NSSM 或 winsw)

把应用做成真正的 Windows Service,优点:随系统启动、在服务管理里可自动重启、能设置日志、恢复策略。NSSM(Non-Sucking Service Manager)和 winsw 都很好用;下面以 NSSM 为例(操作简洁、功能强)。

使用 NSSM(步骤)

  1. 下载 NSSM(把 nssm.exe 放在 C:\nssm\nssm.exe 或放到 PATH)。
  2. 安装服务(命令行):
powershell 复制代码
# 打开管理员 PowerShell 或 cmd
C:\nssm\nssm.exe install MySpringApp
# 这会弹出 GUI,也可以用命令行方式:
C:\nssm\nssm.exe install MySpringApp "C:\Program Files\Java\jdk-17\bin\java.exe" "-jar C:\path\to\app.jar --spring.profiles.active=prod"
  1. 配置(或用 GUI):

    • Application → Path: C:\Program Files\Java\jdk-17\bin\java.exe
    • Arguments: -jar "C:\path\to\app.jar" --spring.profiles.active=prod
    • Startup directory: C:\path\to
    • I/O → stdout/stderr 路径写入日志文件(方便查看)
  2. 启动服务并设置为自动:

powershell 复制代码
nssm.exe start MySpringApp
# 或通过服务管理器设置"启动类型"为"自动"
  1. 管理:可以用 services.msc、net start MySpringApp、net stop MySpringApp 或 nssm 命令控制。

NSSM 的好处:服务崩溃可设置自动重启、支持输出重定向、环境变量支持好。

winsw(另一种可选)

winsw 使用一个 xml 配置文件包装 exe,也常用于 Java 程序。流程类似:生成 MyService.exe(winsw 工具)并把 xml 指向 java.exe + jar,然后安装为服务。

3) 直接用 sc create(不常推荐)

sc create 可以把可执行当服务注册,但命令行参数的细节与权限可能比较麻烦,且管理崩溃恢复不及 NSSM。示例(注意引号):

powershell 复制代码
sc create MySpringApp binPath= "\"C:\Program Files\Java\jdk-17\bin\java.exe\" -jar \"C:\path\to\app.jar\"" start= auto
sc description MySpringApp "Spring Boot app"
net start MySpringApp

(若失败或服务不能正常停止/重启,建议改用 NSSM。)

常见注意事项与技巧

  • Java 路径:务必使用绝对路径(不要依赖 PATH 环境变量),且确保服务用户有权限访问 JRE/JDK 和 jar 文件。
  • 工作目录:很多 Spring Boot 程序会相对路径读取文件,确保 Startup directory 指向 jar 所在目录或配置 --spring.config.location。
  • 日志:通过 NSSM 或脚本把 stdout/stderr 重定向到文件,方便排查。
  • 端口/防火墙:若服务器有防火墙,确保应用使用的端口已放行。
  • JVM 参数:生产常加 -Xms -Xmx -XX:+UseG1GC 等,根据需要调整。
  • 服务用户:若需要访问网络/磁盘/数据库,选择合适的运行账户(Local System 与具名服务账号差异)。
  • 自动重启:在服务管理器中设置恢复策略(第一次失败后重启等),NSSM 也有设置项。
  • 卸载服务:NSSM nssm remove MySpringApp confirm,sc sc delete MySpringApp。

快速示例

任务计划(PowerShell 注册任务示例):

powershell 复制代码
$action = New-ScheduledTaskAction -Execute "C:\Windows\System32\cmd.exe" -Argument "/c `""C:\path\to\start-app.bat`""
$trigger = New-ScheduledTaskTrigger -AtStartup
Register-ScheduledTask -TaskName "StartMySpringApp" -Action $action -Trigger $trigger -RunLevel Highest -User "SYSTEM"

NSSM 命令行示例(替换路径后运行管理员 cmd):

cmd 复制代码
C:\nssm\nssm.exe install MySpringApp "C:\Program Files\Java\jdk-17\bin\java.exe" "-jar C:\path\to\app.jar --spring.profiles.active=prod"
C:\nssm\nssm.exe set MySpringApp AppDirectory "C:\path\to"
C:\nssm\nssm.exe set MySpringApp AppStdout "C:\path\to\logs\stdout.log"
C:\nssm\nssm.exe start MySpringApp

相关推荐
行者全栈架构师14 分钟前
从 55% 到 6%:一个快餐营养规划器的算法迭代实录
后端·算法·架构
余槐i20 分钟前
无慢查询 RT 却飙升:cProfile 定位 FastAPI 事件循环阻塞
后端·python·性能优化·fastapi·asyncio
AINative软件工程28 分钟前
LLM 应用的 Adaptive Batching 工程实践:动态合批把吞吐提升 3 倍,但延迟的坑你踩过吗
后端·llm·ai编程
parser39 分钟前
Python 装饰器:从语法糖、闭包到 @wraps(上篇)
后端
高频因子挖掘机39 分钟前
股票池一大就请求缓慢?量化系统批量获取行情的设计与优化
后端·github·api
郑州光合科技余经理40 分钟前
本地生活平台搭建:跨业态用户标识怎么贯通
java·开发语言·前端·后端·uni-app·php·ai编程
Thneonl1 小时前
故意弄坏生产:混沌工程不是乱砸,是实验设计
后端·程序员
Thneonl1 小时前
别上来就 strace:60 秒十条命令看清一台病机
后端·程序员
马剑威(威哥爱编程)1 小时前
【AI全栈后端12-11】Spring Boot 把 AI 接口真正上线扛量:限流 / 降级 / 可观测
人工智能·spring boot·后端
tachibana21 小时前
Golang 中数组和切片的区别?
开发语言·后端·golang·数组·切片