在 Windows Server 上部署 Java 服务(即 Java 应用程序作为后台服务运行),通常涉及以下几个步骤。下面是一个完整的指南,适用于将 Spring Boot、Java Web 应用或其他基于 Java 的应用程序部署为 Windows 服务。
✅ 前提条件
- Windows Server(如 Windows Server 2016/2019/2022)
- Java JDK 或 JRE 已安装并配置好环境变量
- 你的 Java 应用打包成可执行的 JAR 文件(如
app.jar)
🔧 部署方式一:使用 NSSM(推荐,简单易用)
NSSM (Non-Sucking Service Manager) 是一个开源工具,可以将任意可执行文件包装为 Windows 服务。
步骤 1:下载 NSSM
- 官网:https://nssm.cc/download
- 下载
nssm-2.24.zip或最新版本 - 解压后选择对应系统架构(x64)中的
win64/nssm.exe
步骤 2:安装 Java 服务
- 将
nssm.exe放到某个目录,比如C:nssm - 以 管理员身份运行命令提示符或 PowerShell
C:nssmnssm.exe install MyJavaApp
这会弹出配置窗口。
步骤 3:配置服务参数
在弹出的界面中填写:
-
Application tab
- Path:
C:Program FilesJavajdk-17binjava.exe(根据你的 Java 路径) - Arguments:
-jar "C:myappapp.jar" - Startup directory:
C:myapp(JAR 所在目录)
- Path:
-
Details tab(可选)
- Description: 如 “My Spring Boot Application”
- Start type: Automatic / Manual
-
Log On tab(可选)
- 默认使用 Local System,若需访问网络路径可改为特定账户
点击 Install service
步骤 4:启动服务
net start MyJavaApp
或通过「服务管理器」(services.msc)找到 MyJavaApp 并启动。
步骤 5:查看日志(调试用)
可以在 NSSM 配置的 I/O 选项卡中设置输出日志路径:
- Output (stdout):
C:myapplogsstdout.log - Error (stderr):
C:myapplogsstderr.log
🔧 部署方式二:使用 Apache Commons Daemon(Procrun)
适用于更高级控制,常用于 Tomcat 等服务。
步骤 1:下载 Commons Daemon
- https://commons.apache.org/proper/commons-daemon/
下载 procrun(包含 prunsrv.exe)
步骤 2:准备脚本
假设你把 prunsrv.exe 放在 C:myappservice
创建批处理文件 install.bat:
@echo off
set SERVICE_NAME=MyJavaApp
set PR_PATH=C:myappservice
set JAVA_HOME=C:Program FilesJavajdk-17
set APP_JAR=C:myappapp.jar
"%PR_PATH%prunsrv.exe" //IS//%SERVICE_NAME% ^
--DisplayName="My Java Application" ^
--Description="Spring Boot App as Windows Service" ^
--Startup=auto ^
--LogLevel=INFO ^
--Classpath="%APP_JAR%" ^
--StartMode=jvm ^
--StartClass=com.example.Application ^
--StartMethod=main ^
--StopMode=jvm ^
--StopClass=com.example.Application ^
--StopMethod=stop ^
--JvmOptions="-Xms512m;-Xmx1024m" ^
--Jvm="%JAVA_HOME%binserverjvm.dll"
echo Service installed.
pause
注意:
StartClass是主类全名(含包名)- 若没有
stop方法,可省略 StopMethod,或使用信号中断
步骤 3:运行 install.bat(管理员权限)
然后可用:
net start MyJavaApp
卸载服务:
prunsrv //DS//MyJavaApp
🛠️ 其他建议
1. 设置 JAVA_HOME 环境变量
[Environment]::SetEnvironmentVariable("JAVA_HOME", "C:Program FilesJavajdk-17", "Machine")
[Environment]::SetEnvironmentVariable("PATH", "%JAVA_HOME%bin;%PATH%", "Machine")
2. 开放防火墙端口(如 8080)
New-NetFirewallRule -DisplayName "Java App Port 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow
3. 自动重启配置(NSSM)
在 NSSM 中设置:
- Recovery → First failure: Restart the service
- 第二次失败:也重启
- 后续失败:重启或运行脚本
✅ 验证部署
- 打开浏览器访问
http://your-server-ip:8080 - 查看服务状态:
sc query MyJavaApp
或打开「服务」应用管理。
📌 总结
| 方式 | 优点 | 推荐场景 |
|---|---|---|
| NSSM | 简单、图形化、稳定 | 大多数 Java 应用(Spring Boot) |
| Procrun | 更精细控制 JVM 和生命周期 | 需要集成到企业标准流程 |
如果你提供具体的应用类型(如 Spring Boot、普通 Java SE、Tomcat WAR 包等),我可以给出更精确的部署脚本和配置。
需要我帮你生成一个自动部署的 .bat 脚本吗?
秒懂云