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.mscnet start MySpringAppnet stop MySpringAppnssm 命令控制。

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

相关推荐
L0CK1 小时前
高级篇 05. 多级缓存 - JVM 进程缓存之实现业务缓存
后端
Oneslide1 小时前
基于Nginx实现目录列表展示与文件下载服务(K8s ConfigMap配置版)
后端
Java编程爱好者1 小时前
对于java工程师(高级)的面试如果只考3道题,就能看出他的真实水平
后端
PFinal社区_南丞1 小时前
Go-1.26-五年最差版本-Bug 深度分析
后端
骇客野人1 小时前
Java springboot里注解大全和使用指南
java·开发语言·spring boot
用户8307196840821 小时前
Spring Boot 启动报错:OpenFeign 隐性循环依赖,排查了整整一下午
java·spring boot·spring cloud
星辰_mya1 小时前
@SpringBootApplication 与 SPI 机制的终极解密
java·spring boot·spring
三水不滴1 小时前
Elasticsearch 实战系列(一):从核心基础概念入门到实战落地
后端·elasticsearch
三水不滴2 小时前
Elasticsearch 生产环境全栈最佳实践:从架构设计到故障排查一站式落地指南
后端·elasticsearch·搜索引擎