在 Windows Server 环境下,将 Java 后台应用以服务方式启动,可以确保应用随系统自动启动、后台稳定运行,并便于管理和监控。以下是几种常用的方法:
✅ 方法一:使用 NSSM(Non-Sucking Service Manager)——推荐
NSSM 是一个轻量级、开源的工具,可将任意可执行文件(包括 Java 应用)封装为 Windows 服务。
步骤:
-
下载 NSSM
- 官网:https://nssm.cc/download
- 下载
nssm-2.24.zip或最新版本,解压后选择对应系统架构(x64/x86)中的nssm.exe
-
运行 NSSM(以管理员身份)
nssm install MyJavaAppMyJavaApp是你自定义的服务名称。 -
配置服务参数(图形界面)
在弹出的窗口中填写以下信息:- Path:
java的完整路径(如:C:Program FilesJavajdk-17binjava.exe) - Arguments: 启动 Java 应用的参数,例如:
-jar "D:myappmyapp.jar" --spring.profiles.active=prod - Startup directory: Java 应用所在的目录(如:
D:myapp)
- Path:
-
设置日志(可选)
- 转到 I/O 标签页,设置:
- Output (stdout):
D:logsmyapp.log - Error (stderr):
D:logsmyapp_error.log - 勾选“Rotate logs”
- Output (stdout):
- 转到 I/O 标签页,设置:
-
点击 Install service
-
启动服务
net start MyJavaApp或通过“服务”管理器(
services.msc)启动。 -
设置开机自启
- 默认安装为“自动”启动类型,可在服务属性中确认。
✅ 方法二:使用 Apache Commons Daemon(Procrun)
适用于更正式的部署环境,支持丰富的服务控制选项。
步骤:
-
下载 Commons Daemon
- https://commons.apache.org/proper/commons-daemon/
- 下载
commons-daemon-x.x.x-bin.zip - 解压后获取
prunsrv.exe(64位系统用 x64 版本)
-
创建服务安装脚本(install.bat)
@echo off set SERVICE_NAME=MyJavaApp set PR_INSTALL=C:pathtoprunsrv.exe set PR_JAR_PATH=D:myappmyapp.jar set PR_LOG_PATH=D:logs set JAVA_HOME=C:Program FilesJavajdk-17 "%PR_INSTALL%" //IS//%SERVICE_NAME% ^ --DisplayName="My Java Application" ^ --Description="A Java backend application" ^ --Startup=auto ^ --Install="%PR_INSTALL%" ^ --Jvm="%JAVA_HOME%binserverjvm.dll" ^ --StartMode=jvm ^ --StopMode=jvm ^ --StartClass=org.springframework.boot.loader.JarLauncher ^ --StartParams="-jar;%PR_JAR_PATH%" ^ --LogPath="%PR_LOG_PATH%" ^ --StdOutput="%PR_LOG_PATH%stdout.log" ^ --StdError="%PR_LOG_PATH%stderr.log" -
运行 install.bat(以管理员身份)
-
启动服务
net start MyJavaApp -
卸载服务
prunsrv //DS//MyJavaApp
✅ 方法三:使用 PowerShell + sc 命令(高级)
直接使用 Windows 自带的 sc 命令创建服务(需配合 .bat 启动脚本)。
-
创建启动脚本
start.bat@echo off cd /d D:myapp java -jar myapp.jar --spring.profiles.active=prod -
创建服务
sc create MyJavaApp binPath= "D:myappstart.bat" start= auto DisplayName= "My Java App"
⚠️ 注意:这种方式不推荐用于长期运行的应用,因为
sc不会监控进程崩溃重启,且日志处理较弱。
🔧 其他建议
-
JVM 参数优化:
-Xms512m -Xmx2g -Dfile.encoding=UTF-8可添加到 Arguments 中。
-
日志监控:结合 Windows Event Log 或 ELK/Splunk 等工具。
-
权限问题:
- 确保服务运行账户有足够权限(推荐使用
Local System或专用域账户)。 - 在服务属性 → “登录”选项卡中设置。
- 确保服务运行账户有足够权限(推荐使用
-
防火墙/端口:确保应用监听的端口(如 8080)在防火墙中开放。
✅ 验证服务是否运行
sc query MyJavaApp
或打开 services.msc 查看服务状态。
总结
| 方法 | 推荐度 | 优点 | 缺点 |
|---|---|---|---|
| NSSM | ⭐⭐⭐⭐⭐ | 简单易用,功能全,社区支持好 | 需额外工具 |
| Procrun | ⭐⭐⭐⭐ | Apache 官方,企业级 | 配置复杂 |
| sc + bat | ⭐⭐ | 无需第三方工具 | 功能弱,难维护 |
📌 推荐使用 NSSM,适合大多数 Java 后台应用部署场景。
如有 Spring Boot 应用,还可考虑打包为 EXE(使用 launch4j + wrapper),但服务化仍推荐上述方法。
云小栈