在 Windows Server 上部署 Java 程序是一个常见的需求,尤其适用于运行基于 Spring Boot、Java Web 应用或其他 Java 后端服务。以下是详细的部署步骤和最佳实践:
一、准备工作
1. 安装 Java 运行环境(JRE 或 JDK)
- 下载 JDK(推荐使用 Oracle JDK、OpenJDK 或 Adoptium):
- 官网示例:https://adoptium.net/(免费开源)
- 下载适合 Windows Server 的
.msi安装包(64位)。 - 安装完成后,配置环境变量。
2. 配置环境变量
以管理员身份打开“系统属性” → “高级” → “环境变量”,设置:
JAVA_HOME = C:Program FilesJavajdk-17 (根据实际路径)
Path 添加:%JAVA_HOME%bin
验证是否安装成功:
java -version
javac -version
二、准备 Java 程序
1. 获取可执行的 JAR 包
-
如果是 Spring Boot 项目,使用 Maven 构建:
mvn clean package生成
target/myapp.jar -
将 JAR 文件上传到服务器(可通过 FTP、远程桌面复制等方式)。
2. 测试运行
进入命令行,运行:
java -jar myapp.jar
如果程序正常启动并监听端口(如 8080),说明可以运行。
三、设置为后台服务(推荐)
直接运行 java -jar 在关闭窗口后会终止进程。建议将 Java 程序注册为 Windows 服务。
方法一:使用 NSSM(Non-Sucking Service Manager)——推荐
-
下载 NSSM
- 官网:https://nssm.cc/download
- 下载
win64版本,解压到C:nssm
-
安装服务
打开命令提示符(管理员):C:nssmnssm.exe install MyJavaApp -
在弹出窗口中配置:
- Path:
C:Program FilesJavajdk-17binjava.exe - Arguments:
-jar "D:appsmyapp.jar" - Startup directory:
D:apps(JAR 所在目录)
- Path:
-
点击 “Install service”
-
启动服务:
net start MyJavaApp -
查看服务状态:
- 打开“服务”管理器(
services.msc),找到MyJavaApp
- 打开“服务”管理器(
✅ 优点:自动启动、崩溃重启、日志记录等。
方法二:使用 Apache Commons Daemon(procrun)
适用于更精细控制,但配置较复杂。略。
四、配置防火墙和端口
确保客户端能访问应用端口(如 8080):
- 打开“高级安全 Windows 防火墙”
- 添加入站规则:
- 协议:TCP
- 端口:8080
- 允许连接
或使用命令行:
netsh advfirewall firewall add rule name="Java App Port 8080" dir=in action=allow protocol=TCP localport=8080
五、配置开机自启 & 故障恢复
在“服务”管理器中,右键你的服务 → 属性:
- 启动类型:自动
- 恢复:第一次失败 → 重启服务;第二次失败 → 重启服务器等
六、日志管理
- Java 程序的日志通常输出到控制台,NSSM 可重定向到文件。
- 在 NSSM 配置中设置:
- I/O → Output →
D:logsmyapp.log
- I/O → Output →
- 建议使用 Logback / Log4j2 输出到文件,并定期归档。
七、监控与维护
- 使用任务管理器或 PowerShell 监控 Java 进程:
Get-Process java - 设置定时脚本检查服务状态(可选)
- 考虑集成 Zabbix、Prometheus + JMX Exporter 进行监控
八、安全建议
- 不要使用默认账户运行服务,创建专用用户。
- 限制服务权限。
- 定期更新 JDK 和应用依赖。
- 使用 HTTPS(可结合 Nginx 或 IIS 反向X_X)
示例:Spring Boot 部署完整流程
- 本地打包:
mvn clean package - 上传
target/demo-0.0.1.jar到服务器D:app - 使用 NSSM 注册为服务
- 开放防火墙 8080 端口
- 启动服务,浏览器访问
http://服务器IP:8080
常见问题排查
| 问题 | 解决方法 |
|---|---|
java is not recognized |
检查 JAVA_HOME 和 Path |
| 端口被占用 | netstat -ano | findstr :8080 查杀进程 |
| 权限不足 | 以管理员身份运行 NSSM 或 CMD |
| 服务启动失败 | 查看 NSSM 日志输出路径 |
如有具体框架(如 Spring Boot、Tomcat)、是否需要反向X_X(Nginx/IIS)、数据库连接等,可进一步细化方案。
需要我提供自动化部署脚本(PowerShell)或结合 IIS/Nginx 的反向X_X配置吗?
CLOUD云计算