java spring boot做的jar包程序,如何实现自动运行启动

要在不登录 Windows Server 的情况下让 Spring Boot 的 JAR 包自动运行,最标准的做法是将该 JAR 包封装成 Windows 服务 (Windows Service) ,或者利用 Windows 自带的 任务计划程序 (Task Scheduler)

以下为你提供两种最常用且稳定的实现方案。

方案一:使用 WinSW 封装为 Windows 服务(最推荐,适合生产环境)

WinSW (Windows Service Wrapper) 是一个开源工具,它可以将任何可执行文件(包括 java -jar 命令)包装成标准的 Windows 服务。服务可以设置为开机自启,且不需要任何用户登录。

步骤:

下次服务器重启时,系统会在加载登录界面前,在后台默默拉起你的 Java 进程。

总结建议: 如果你需要更稳定的守护进程,以及更规范的错误日志收集,推荐使用方案一 (WinSW),它更容易在团队运维交接时进行管理。

  1. 下载 WinSW 前往 GitHub 的 WinSW 发布页,下载对应版本的 .exe 文件(如 WinSW-x64.exe 或基于 .NET 的版本)。

  2. 准备目录和文件 将你的 Spring Boot JAR 包和下载的 WinSW .exe 放在同一个目录下。为了方便,将 WinSW 的 .exe 重命名为与你的应用相关的名字,例如 MyApp.exe

  3. 创建配置文件 在同目录下,创建一个与 .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>
  4. 安装并启动服务管理员身份打开命令提示符 (CMD),进入该目录,执行以下命令:

    • 安装服务:MyApp.exe install

    • 启动服务:MyApp.exe start

  5. 至此,你的程序已经作为 Windows 服务在后台运行了。你可以按 Win + R 输入 services.msc,在服务列表中找到并管理它(将其启动类型设置为"自动"即可实现开机自启)。

    方案二:使用 Windows 任务计划程序(无需第三方工具)

    如果你不想引入任何第三方 .exe,可以使用系统自带的"任务计划程序"来实现后台自启。

    步骤:

  6. Win + R,输入 taskschd.msc 打开"任务计划程序"。

  7. 在右侧操作栏点击 "创建任务..."(注意:不要选"创建基本任务")。

  8. 常规 (General) 选项卡:

    • 填写名称(如:启动 SpringBoot 项目)。

    • 关键设置: 勾选 "不管用户是否登录都要运行" (Run whether user is logged on or not)

    • 勾选 "使用最高权限运行" (Run with highest privileges)

  9. 触发器 (Triggers) 选项卡:

    • 点击"新建"。

    • "开始任务"选择 "系统启动时" (At startup),点击确定。

  10. 操作 (Actions) 选项卡:

    • 点击"新建",操作选择"启动程序"。

    • 程序或脚本: 填入 java(如果未配置环境变量,需填入 java.exe 的完整绝对路径)。

    • 添加参数: 填入 -jar your-springboot-app.jar

    • 起始于 (Start in): (非常重要) 填入你 JAR 包所在的绝对路径目录,例如 D:\Apps\SpringBootProject\(结尾建议带上 \)。

  11. 点击确定,系统会要求你输入当前 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 管理员权限下执行:

  1. MyApp.exe stop

  2. MyApp.exe uninstall

  3. MyApp.exe install

  4. MyApp.exe start

方案二:在 Windows 任务计划程序中设置

如果你使用的是任务计划程序,修改参数同样是在"操作"选项卡中进行。

  1. 打开任务计划程序,双击你的启动任务。

  2. 切换到 "操作" 选项卡,双击编辑启动程序的操作。

  3. "添加参数(可选)" 文本框中,按顺序填入你的参数组合。

参数填写格式:-Xms1024m -Xmx2048m -XX:MaxMetaspaceSize=256m -jar your-springboot-app.jar

(注意各参数之间保持一个空格)

  1. 点击确定保存。下一次任务触发(即服务器重启)时,新的内存配置就会生效。如果想立即生效,你可以在任务管理器中结束当前的 java.exe 进程,然后右键任务计划点击"运行"。

如何验证配置是否生效?

配置完成后,你可以通过以下方法确认 Spring Boot 是不是真的按照设定的内存跑起来了:

  1. 使用 JDK 自带的命令行工具: 打开命令提示符,输入 jps -l 找到你正在运行的 Spring Boot 项目的进程 ID (PID)。 然后输入 jcmd <PID> VM.flags,在输出的字符串中,如果你看到了 -XX:InitialHeapSize-XX:MaxHeapSize 等对应你设置的数值,就说明配置成功了。

  2. 通过 Windows 任务管理器观察: 在任务管理器中找到对应的 Java(TM) Platform SE binary 进程。虽然任务管理器显示的内存占用不完全等于 Heap 大小(还包括元空间、堆外内存等),但如果它的内存占用稳定在你设定的 -Xmx 附近,且没有无限制地吃满整台服务器的内存,就说明限制参数已经发挥了作用。

相关推荐
星空你好1 小时前
AI辅助运维:开源一个内网日志监控工具
运维
风曦Kisaki2 小时前
Kubernetes(K8s)笔记Day06: 持久化存储(emptyDir,hostPath,NFS),PV 和 PVC,StorageClass存储类
linux·运维·笔记·云原生·容器·kubernetes
Dr.kangder2 小时前
嵌入式处理器仿真技术——Hypervisor 原理与实践
服务器·嵌入式硬件·架构·嵌入式
星蓝_starblue4 小时前
零服务器、零数据库!开源growth-board,利用GitHub自动管理刷题/学习/求职全流程
服务器·数据库·程序人生·系统架构·node.js·github·改行学it
都叫我大帅哥4 小时前
给 Java 程序员的 CSRF 攻击详解:从原理到防御实战
java
江南十四行4 小时前
Spring框架核心(上)——IoC控制反转与DI依赖注入详解
java·后端·spring
fb_123455 小时前
Linux磁盘分区从入门到实操:MBR_GPT全解析+分区工具实战指南
java·linux·gpt
码智社6 小时前
JSON 零基础到资深全体系教程
java·json
Crazy________6 小时前
k8s部署若依微服务架构流程,v3.6.6
运维·云原生·容器·kubernetes·状态模式