把 Spring Boot 的 jar 在 Windows 开机时自动启动,有几种常用且可靠的方法。
按从简单到专业排序:任务计划(Task Scheduler) 、把 jar 注册为 Windows 服务(推荐用 NSSM 或 winsw) 、以及直接用 sc create。下面给出每种方法的步骤、示例命令和注意事项。
只需把示例中的 java 路径和 C:\path\to\app.jar 替换成你自己的路径即可。
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
-
打开「任务计划程序」→ 右侧「创建任务」:
- 常规:勾选"使用最高权限运行",配置为"无论用户是否登录都运行"。
- 触发器:新建 → "在计算机启动时"。
- 操作:新建 → 程序/脚本 指向
start-app.bat(或直接指定 java.exe 并把参数写入"添加参数")。 - 条件/设置:取消勾选"只有在计算机使用交流电源供电时",勾选"如果任务失败,则重新启动每 X 分钟"。
-
保存后可以在任务计划程序里右键运行测试,重启机器验证。
2) 推荐:把 jar 注册为 Windows 服务(使用 NSSM 或 winsw)
把应用做成真正的 Windows Service,优点:随系统启动、在服务管理里可自动重启、能设置日志、恢复策略。NSSM(Non-Sucking Service Manager)和 winsw 都很好用;下面以 NSSM 为例(操作简洁、功能强)。
使用 NSSM(步骤)
- 下载 NSSM(把
nssm.exe放在C:\nssm\nssm.exe或放到 PATH)。 - 安装服务(命令行):
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"
-
配置(或用 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 路径写入日志文件(方便查看)
- Application → Path:
-
启动服务并设置为自动:
powershell
nssm.exe start MySpringApp
# 或通过服务管理器设置"启动类型"为"自动"
- 管理:可以用
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,scsc 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