在 Windows Server 上部署 Java 服务,通常是指将一个 Java 应用程序(如 Spring Boot、Java Web 应用等)部署为后台服务(Windows Service),使其在系统启动时自动运行,并在后台持续运行。以下是详细步骤:
一、准备工作
-
安装 Java 运行环境(JRE 或 JDK)
- 下载并安装 Oracle JDK 或 OpenJDK(推荐使用长期支持版本,如 JDK 8、11、17)。
- 设置环境变量:
JAVA_HOME:指向 JDK 安装目录(如C:Program FilesJavajdk-17)- 将
%JAVA_HOME%bin添加到PATH环境变量中。
- 验证安装:
java -version
-
准备你的 Java 应用
- 打包为可执行的 JAR 文件(如
myapp.jar)。 - 确保 JAR 文件可以通过命令行运行:
java -jar myapp.jar测试应用是否能正常启动。
- 打包为可执行的 JAR 文件(如
二、将 Java 应用部署为 Windows 服务
由于 Java 程序本身不是 Windows 服务,需要借助工具将其封装为服务。常用工具:
方法一:使用 NSSM(Non-Sucking Service Manager)——推荐
NSSM 是一个轻量、易用的工具,可将任意可执行程序包装为 Windows 服务。
-
下载 NSSM
- 官网:https://nssm.cc/download
- 下载
nssm-2.24.zip,解压后选择对应架构(win32 或 win64)的nssm.exe。
-
运行 NSSM 并创建服务
-
打开命令提示符(管理员权限):
C:pathtonssm.exe install MyJavaApp(
MyJavaApp是服务名称) -
弹出配置窗口,填写以下信息:
- Application tab:
- Path:
C:Program FilesJavajdk-17binjava.exe - Arguments:
-jar "C:myappmyapp.jar" - Startup directory:
C:myapp(JAR 所在目录) - Details tab(可选):
- Description: "My Java Application"
- Start Type: Automatic
- Log On tab:
- 默认使用 Local System Account,或指定用户账户。
- Exit Actions tab:
- 可设置崩溃后自动重启。
-
-
启动服务
net start MyJavaApp -
管理服务
- 查看服务状态:
sc query MyJavaApp - 停止服务:
net stop MyJavaApp - 删除服务(如需):
nssm remove MyJavaApp
- 查看服务状态:
方法二:使用 Apache Commons Daemon(Procrun)
适用于更高级控制,适合企业级部署。
- 下载 Apache Commons Daemon
- 使用
prunsrv.exe工具注册服务:prunsrv.exe install MyJavaApp ^ --DisplayName="My Java App" ^ --Startup=auto ^ --Jvm=auto ^ --Classpath="C:myappmyapp.jar" ^ --StartMode=jvm ^ --StartClass=com.example.Main ^ --StartMethod=main ^ --StopMode=jvm ^ --StopClass=com.example.Main ^ --StopMethod=shutdown
注意:需要主类有
main和shutdown方法支持。
三、配置与优化
-
JVM 参数优化
在启动参数中加入 JVM 调优:-Xms512m -Xmx2048m -XX:+UseG1GC例如在 NSSM 的 Arguments 中写:
-Xms512m -Xmx2048m -jar "C:myappmyapp.jar" -
日志输出
- 建议将日志重定向到文件:
-jar myapp.jar > C:myapplogsapp.log 2>&1 - 或在应用内部使用 Logback / Log4j 配置日志路径。
- 建议将日志重定向到文件:
-
防火墙设置
- 如果服务监听端口(如 8080),需在 Windows 防火墙中放行该端口。
-
自动启动与恢复
- 在服务属性中设置“启动失败时自动重启”。
四、验证部署
- 打开“服务”管理器(
services.msc),查看MyJavaApp是否正在运行。 - 检查应用日志是否正常输出。
- 访问应用接口(如
http://localhost:8080/health)确认服务可用。 - 重启服务器,确认服务自动启动。
五、常见问题排查
| 问题 | 解决方法 |
|---|---|
| 服务启动后立即停止 | 检查 JAR 路径、Java 路径、JVM 参数是否正确;查看日志 |
| 找不到或无法加载主类 | 确保 JAR 是可执行 JAR(含 Main-Class 在 MANIFEST.MF) |
| 权限不足 | 使用管理员运行 NSSM,或为服务账户赋予足够权限 |
| 端口被占用 | 检查端口使用情况 netstat -ano | findstr :8080 |
六、补充建议
- 使用 PowerShell 脚本自动化部署。
- 结合任务计划程序或监控工具(如 Nagios、Zabbix)进行健康检查。
- 考虑使用 Docker 容器化部署(Windows Server 2016+ 支持 Docker),更便于管理。
✅ 总结:
使用 NSSM 是在 Windows Server 上部署 Java 服务最简单、可靠的方式。只需几步骤即可将 .jar 文件变为开机自启、稳定运行的 Windows 服务。
如需,我可以提供一键部署脚本(批处理或 PowerShell)。是否需要?
CCLOUD博客