要在不登录 Windows Server 的情况下让 Spring Boot 的 JAR 包自动运行,最标准的做法是将该 JAR 包封装成 Windows 服务 (Windows Service) ,或者利用 Windows 自带的 任务计划程序 (Task Scheduler)。
以下为你提供两种最常用且稳定的实现方案。
方案一:使用 WinSW 封装为 Windows 服务(最推荐,适合生产环境)
WinSW (Windows Service Wrapper) 是一个开源工具,它可以将任何可执行文件(包括 java -jar 命令)包装成标准的 Windows 服务。服务可以设置为开机自启,且不需要任何用户登录。
步骤:
下次服务器重启时,系统会在加载登录界面前,在后台默默拉起你的 Java 进程。
总结建议: 如果你需要更稳定的守护进程,以及更规范的错误日志收集,推荐使用方案一 (WinSW),它更容易在团队运维交接时进行管理。
-
下载 WinSW 前往 GitHub 的 WinSW 发布页,下载对应版本的
.exe文件(如WinSW-x64.exe或基于 .NET 的版本)。 -
准备目录和文件 将你的 Spring Boot JAR 包和下载的 WinSW
.exe放在同一个目录下。为了方便,将 WinSW 的.exe重命名为与你的应用相关的名字,例如MyApp.exe。 -
创建配置文件 在同目录下,创建一个与
.exe同名的 XML 配置文件,例如MyApp.xml。输入以下基础配置:XML<service> <!-- 服务的唯一ID --> <id>SpringBootMyApp</id> <!-- 服务在 Windows 服务列表里显示的名称 --> <name>Spring Boot My App Service</name> <!-- 服务的描述 --> <description>运行 Spring Boot 业务接口程序的后台服务</description> <!-- Java 环境变量路径 (如果系统已配置环境变量,可直接写 java) --> <executable>java</executable> <!-- 传递给 Java 的参数,可以在这里加上 JVM 调优参数,例如 -Xms512m -Xmx1024m --> <arguments>-jar "%BASE%\your-springboot-app.jar"</arguments> <!-- 配置日志输出模式 (rotate表示按大小或时间轮转) --> <logmode>rotate</logmode> </service> -
安装并启动服务 以管理员身份打开命令提示符 (CMD),进入该目录,执行以下命令:
-
安装服务:
MyApp.exe install -
启动服务:
MyApp.exe start
-
-
至此,你的程序已经作为 Windows 服务在后台运行了。你可以按
Win + R输入services.msc,在服务列表中找到并管理它(将其启动类型设置为"自动"即可实现开机自启)。方案二:使用 Windows 任务计划程序(无需第三方工具)
如果你不想引入任何第三方
.exe,可以使用系统自带的"任务计划程序"来实现后台自启。步骤:
-
按
Win + R,输入taskschd.msc打开"任务计划程序"。 -
在右侧操作栏点击 "创建任务..."(注意:不要选"创建基本任务")。
-
常规 (General) 选项卡:
-
填写名称(如:
启动 SpringBoot 项目)。 -
关键设置: 勾选 "不管用户是否登录都要运行" (Run whether user is logged on or not)。
-
勾选 "使用最高权限运行" (Run with highest privileges)。
-
-
触发器 (Triggers) 选项卡:
-
点击"新建"。
-
"开始任务"选择 "系统启动时" (At startup),点击确定。
-
-
操作 (Actions) 选项卡:
-
点击"新建",操作选择"启动程序"。
-
程序或脚本: 填入
java(如果未配置环境变量,需填入java.exe的完整绝对路径)。 -
添加参数: 填入
-jar your-springboot-app.jar。 -
起始于 (Start in): (非常重要) 填入你 JAR 包所在的绝对路径目录,例如
D:\Apps\SpringBootProject\(结尾建议带上\)。
-
-
点击确定,系统会要求你输入当前 Administrator 或有权限的账户密码。保存后即可。
如何在 WinSW 启动脚本或 Task Scheduler 中配置 JVM 内存参数来优化这个 Spring Boot 项目的运行
xMetaspaceSize: 元空间大小(Spring Boot 启动会加载大量类,建议限制一下最大值,如 256m 或 512m)。
以下是具体的配置方法:
方案一:在 WinSW 的 XML 配置文件中设置
打开你之前创建的与 .exe 同名的 .xml 文件,找到 <arguments> 标签,将 JVM 参数补充在 -jar 前面。
配置示例:
XML
<service>
<id>SpringBootMyApp</id>
<name>Spring Boot My App Service</name>
<description>运行 Spring Boot 业务接口程序的后台服务</description>
<executable>java</executable>
<!-- 将 JVM 内存优化参数加在 -jar 之前 -->
<arguments>-Xms1024m -Xmx2048m -XX:MaxMetaspaceSize=256m -jar "%BASE%\your-springboot-app.jar"</arguments>
<logmode>rotate</logmode>
</service>
修改后的生效步骤: 如果你已经安装了该服务,需要先卸载再重新安装,或者重启服务(某些版本的 WinSW 支持直接重启服务来重新读取参数,但稳妥起见建议重新安装)。 在 CMD 管理员权限下执行:
-
MyApp.exe stop -
MyApp.exe uninstall -
MyApp.exe install -
MyApp.exe start
方案二:在 Windows 任务计划程序中设置
如果你使用的是任务计划程序,修改参数同样是在"操作"选项卡中进行。
-
打开任务计划程序,双击你的启动任务。
-
切换到 "操作" 选项卡,双击编辑启动程序的操作。
-
在 "添加参数(可选)" 文本框中,按顺序填入你的参数组合。
参数填写格式:-Xms1024m -Xmx2048m -XX:MaxMetaspaceSize=256m -jar your-springboot-app.jar
(注意各参数之间保持一个空格)
- 点击确定保存。下一次任务触发(即服务器重启)时,新的内存配置就会生效。如果想立即生效,你可以在任务管理器中结束当前的
java.exe进程,然后右键任务计划点击"运行"。
如何验证配置是否生效?
配置完成后,你可以通过以下方法确认 Spring Boot 是不是真的按照设定的内存跑起来了:
-
使用 JDK 自带的命令行工具: 打开命令提示符,输入
jps -l找到你正在运行的 Spring Boot 项目的进程 ID (PID)。 然后输入jcmd <PID> VM.flags,在输出的字符串中,如果你看到了-XX:InitialHeapSize和-XX:MaxHeapSize等对应你设置的数值,就说明配置成功了。 -
通过 Windows 任务管理器观察: 在任务管理器中找到对应的
Java(TM) Platform SE binary进程。虽然任务管理器显示的内存占用不完全等于 Heap 大小(还包括元空间、堆外内存等),但如果它的内存占用稳定在你设定的-Xmx附近,且没有无限制地吃满整台服务器的内存,就说明限制参数已经发挥了作用。