在 Windows Server 上部署 Java 服务是一个常见需求,尤其在企业环境中。以下是详细的步骤和最佳实践,帮助你在 Windows Server 上成功部署 Java 应用(如 Spring Boot、Java Web 应用等)并作为后台服务运行。
🛠️ 一、准备工作
1. 安装 Java 运行环境(JRE 或 JDK)
确保服务器上已安装合适的 Java 版本(如 Java 8、11、17 等)。
下载地址:
- Oracle JDK
- OpenJDK(推荐免费开源)
验证安装:
java -version
输出示例:
openjdk version "17.0.9" 2023-10-17
OpenJDK Runtime Environment (build 17.0.9+9)
OpenJDK 64-Bit Server VM (build 17.0.9+9, mixed mode)
✅ 建议设置
JAVA_HOME环境变量。
2. 准备 Java 应用程序
确保你有一个可运行的 .jar 文件(如 myapp.jar),通常通过 Maven/Gradle 构建生成。
例如:
target/myapp-1.0.0.jar
🚀 二、部署 Java 应用
方法一:直接运行(测试阶段)
java -jar myapp.jar
缺点:关闭命令行窗口后程序停止。
方法二:使用 Windows 服务(推荐生产环境)
将 Java 应用注册为 Windows Service,实现开机自启、后台运行、崩溃自动重启。
推荐工具:NSSM (Non-Sucking Service Manager)
步骤:
-
下载 NSSM
- 访问 https://nssm.cc/download
- 下载最新版,解压到目录如:
C:nssm
-
以管理员身份运行 CMD 或 PowerShell
cd C:nssmwin64 nssm install MyJavaApp -
配置服务参数
在弹出的 GUI 窗口中填写:
- Path:
C:Program FilesJavajdk-17binjava.exe
(或你的java.exe路径) - Arguments:
-jar "C:myappmyapp.jar" - Startup directory:
C:myapp - (可选)在 “Log On” 标签中设置运行账户(建议使用专用服务账户)
- Path:
-
保存并启动服务
nssm start MyJavaApp -
验证服务状态
打开“服务”管理器(services.msc),查看MyJavaApp是否正在运行。
方法三:使用 Apache Commons Daemon (procrun)
适用于更高级控制,但配置较复杂。
下载地址:https://commons.apache.org/proper/commons-daemon/
配置 prunsrv.exe 注册服务,适合需要 JVM 参数精细控制的场景。
🔧 三、配置优化与维护
1. JVM 参数调优(建议加入启动参数)
-Xms512m -Xmx2g -XX:+UseG1GC -Dspring.profiles.active=prod
修改 NSSM 中的 Arguments:
-jar "C:myappmyapp.jar" --spring.config.location=C:myappapplication-prod.yml -Xms512m -Xmx2g
⚠️ 注意:JVM 参数应放在 java 命令后,-jar 前:
java -Xms512m -Xmx2g -jar myapp.jar
所以在 NSSM 的 Path 写 java.exe,Arguments 写:
-Xms512m -Xmx2g -jar "C:myappmyapp.jar"
2. 日志管理
- 设置日志输出路径(如
logs/app.log) - 使用 logback 或 log4j2 配置滚动日志
- 可在 NSSM 中设置“IO”选项重定向 stdout/stderr 到文件
3. 开机自启 & 故障恢复
在 NSSM 的 “Recovery” 选项卡中设置:
- 第一次失败:重启服务
- 第二次失败:重启服务
- 后续失败:重启计算机或运行脚本
4. 防火墙开放端口
如果应用监听 8080 端口,需放行防火墙:
New-NetFirewallRule -DisplayName "Java App Port 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow
🔄 四、更新与维护
更新流程:
- 停止服务:
nssm stop MyJavaApp - 替换新的 JAR 文件
- 启动服务:
nssm start MyJavaApp
✅ 五、检查清单
| 项目 | 是否完成 |
|---|---|
| 安装 Java 并配置 JAVA_HOME | ✅ |
| 准备好可运行的 .jar 文件 | ✅ |
| 使用 NSSM 注册为 Windows 服务 | ✅ |
| 设置 JVM 内存参数 | ✅ |
| 配置日志输出 | ✅ |
| 开放防火墙端口 | ✅ |
| 测试服务启停与自启 | ✅ |
📚 示例:完整 NSSM 配置截图说明
| 字段 | 值 |
|---|---|
| Path | C:Program FilesJavajdk-17binjava.exe |
| Arguments | -Xms512m -Xmx2g -jar "C:myappmyapp.jar" |
| Startup directory | C:myapp |
| Log on as | .svc-java(建议专用账户) |
📞 六、常见问题排查
| 问题 | 解决方案 |
|---|---|
| 服务启动后立即停止 | 检查日志路径、JAR 路径是否正确,权限是否足够 |
| 提示“找不到或无法加载主类” | 确保 JAR 是可执行的(含 Main-Class) |
| 端口被占用 | netstat -ano | findstr :8080 查看并终止进程 |
| 权限不足 | 以管理员运行 NSSM,或指定具有权限的服务账户 |
✅ 总结
在 Windows Server 上部署 Java 服务的最佳方式是:
使用 NSSM 将 .jar 包注册为 Windows 服务,实现稳定、自动重启、后台运行。
这比简单地使用 java -jar 或批处理脚本更加可靠,适合生产环境。
如果你提供具体的应用类型(如 Spring Boot、Tomcat WAR、普通 Java 程序),我可以给出更定制化的部署脚本或配置建议。
CLOUD技术博