在 Windows Server 2019 上部署 Java 项目(通常指 Spring Boot 等打包为可执行 JAR/WAR 的应用)是一个常见的需求。以下是完整、详细、生产环境推荐的部署步骤指南:
✅ 一、前置准备
1. 安装 Java Runtime Environment (JRE) 或 JDK
- 推荐版本:Java 8 / Java 11 / Java 17(根据项目要求选择)
- 下载地址:Oracle JDK 或 OpenJDK
- 安装路径建议:
C:Javajdk-17或C:Program FilesJavajdk-17
2. 配置环境变量
- 右键“此电脑” → “属性” → “高级系统设置” → “环境变量”
- 新建系统变量:
JAVA_HOME=C:Javajdk-17(替换为你的实际路径)
- 编辑
Path变量,添加:%JAVA_HOME%bin
- 打开命令提示符,验证安装:
java -version javac -version
✅ 二、准备 Java 项目
1. 打包项目
-
如果是 Maven 项目:
mvn clean package -DskipTests生成文件如:
target/myapp-1.0.jar -
如果是 Gradle 项目:
gradle build生成文件如:
build/libs/myapp-1.0.jar
⚠️ 确保项目中已正确配置内嵌服务器(如 Spring Boot 默认使用 Tomcat),并设置为独立运行模式。
2. 上传到服务器
- 使用 SCP、FTP、WinSCP 或 Azure Blob Storage 等方式将
.jar文件上传至服务器指定目录,例如:C:Appsmyappmyapp-1.0.jar
✅ 三、创建 Windows 服务(推荐方式)
直接双击运行 jar 包不适合生产环境。推荐使用 NSSM(Non-Sucking Service Manager)将 Java 应用注册为 Windows 服务。
1. 下载并安装 NSSM
- 官网:https://nssm.cc/download
- 解压后复制
nssm.exe到系统目录,如:C:WindowsSystem32
2. 注册服务
以管理员身份打开命令提示符(CMD)或 PowerShell,执行:
nssm install MyJavaApp "C:Javajdk-17binjava.exe" "-jar C:Appsmyappmyapp-1.0.jar"
参数说明:
MyJavaApp:服务名称(自定义)"C:Javajdk-17binjava.exe":Java 可执行文件路径"-jar C:Appsmyappmyapp-1.0.jar":启动参数
3. 配置服务细节(可选但推荐)
执行以下命令进入图形化配置界面:
nssm edit MyJavaApp
关键配置项:
- Application:保持默认
- Startup directory:
C:Appsmyapp - Output:
- Stdout file:
C:Appsmyapplogsstdout.log - Stderr file:
C:Appsmyapplogsstderr.log
- Stdout file:
- Shutdown:勾选“Wait for service to stop”,超时时间设为 60 秒
- Recovery:设置重启策略(如第一次失败重启,第二次失败重启等)
4. 启动服务
nssm start MyJavaApp
查看服务状态:
nssm status MyJavaApp
5. 设置开机自启
nssm set MyJavaApp Start SERVICE_AUTO_START
✅ 四、防火墙与端口开放
假设你的 Java 应用监听端口为 8080:
- 打开“高级安全 Windows 防火墙”
- 新建入站规则:
- 类型:端口
- 协议:TCP
- 本地端口:8080
- 操作:允许连接
- 配置文件:域、专用、公用(按需选择)
- 名称:
Allow Java App Port 8080
或使用 PowerShell 一键添加:
New-NetFirewallRule -DisplayName "Allow Java App" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow
✅ 五、日志管理与监控
1. 日志轮转(Log Rotation)
- 可使用 NLog、Logback 等框架配置日志滚动
- 或在操作系统层面使用 Windows Event Log 或第三方工具如 Logrotate for Windows
2. 监控建议
- 使用 Prometheus + Grafana 监控 JVM 指标(通过 Micrometer)
- 或使用 Windows Performance Monitor 监控 CPU、内存使用情况
✅ 六、备份与维护
1. 定期备份
- 备份
myapp-1.0.jar和配置文件 - 使用 Task Scheduler 创建定时任务执行备份脚本
2. 更新部署流程
- 停止服务:
nssm stop MyJavaApp - 替换新 jar 包
- 启动服务:
nssm start MyJavaApp - 检查日志确认无异常
✅ 七、常见问题排查
| 问题 | 解决方案 |
|---|---|
| 服务无法启动 | 检查 JAVA_HOME 是否正确;检查 jar 包路径是否含空格(用引号包裹) |
| 端口被占用 | 使用 netstat -ano | findstr :8080 查找占用进程 |
| 内存溢出 | 调整 JVM 参数,如 -Xms512m -Xmx1024m |
| 中文乱码 | 在启动参数中添加 -Dfile.encoding=UTF-8 |
示例带参数的启动命令:
nssm install MyJavaApp "C:Javajdk-17binjava.exe" "-Xms512m -Xmx1024m -Dfile.encoding=UTF-8 -jar C:Appsmyappmyapp-1.0.jar"
✅ 八、替代方案对比
| 方案 | 优点 | 缺点 |
|---|---|---|
| NSSM 服务 | 稳定、易管理、支持自动重启 | 需额外安装 NSSM |
| Tomcat 容器 | 适合 WAR 包,生态成熟 | 配置复杂,资源占用高 |
| Docker | 隔离性好,便于迁移 | 需要安装 Docker Desktop 或 Docker Engine |
| 直接后台运行 | 简单快捷 | 不稳定,无日志管理,不适合生产 |
🚀 生产环境强烈推荐 NSSM 或 Docker 方案
✅ 九、最终验证
- 浏览器访问:
http://<服务器IP>:8080 - 查看日志文件确认无报错
- 检查 Windows 服务管理器中服务状态为“正在运行”
- 测试 API 接口是否正常响应
如需进一步自动化部署,可结合 Jenkins、GitLab CI/CD 或 Azure DevOps 实现持续集成与部署。
如有具体项目结构或错误日志,欢迎提供更多信息,我可以为你定制优化方案。
轻量云Cloud