直接上干货。在 Windows Server 2019 上部署 Java 项目,核心就三步:环境准备、应用打包、服务化运行。
很多人喜欢用 Tomcat GUI 界面去启动,那是开发调试用的。生产环境必须做成 Windows Service(系统服务),这样服务器重启后应用能自动拉起,不用人盯着。
第一步:基础环境搭建
别去官网下最新版 JDK,除非你有特殊需求。稳定起见,推荐 JDK 11 或 JDK 8 (LTS)。
- 下载 JDK:
- 去 Adoptium (Eclipse Temurin) 或者 Oracle 官网下载 Windows x64 Installer (.msi)。
- 关键点:安装时勾选 "Add to PATH",虽然手动配环境变量也行,但让安装程序自己搞定更省事,不容易出错。
- 验证安装:
- 打开 CMD,输入
java -version和javac -version。 - 如果能看到版本号,说明环境没问题。如果有报错,检查你的环境变量
JAVA_HOME和Path是否配置正确,特别是路径里不要有中文或空格。
- 打开 CMD,输入
第二步:准备你的 Java 项目
假设你用的是 Maven 或 Gradle 构建的项目。
- 打成 Jar 包:
- 确保你的
pom.xml(Maven) 或build.gradle(Gradle) 配置了正确的打包插件。 - Spring Boot 项目通常使用
spring-boot-maven-plugin。 - 执行
mvn clean package -DskipTests。 - 生成的
.jar文件通常在target目录下。
- 确保你的
- 测试运行:
- 在服务器上创建一个目录,比如
C:appmyproject。 - 把 jar 包放进去。
- 命令行运行:
java -jar myproject.jar。 - 看控制台日志,确认端口(默认 8080)没被占用,且应用启动成功。这一步是为了排除代码本身的问题。
- 在服务器上创建一个目录,比如
第三步:将应用注册为 Windows 服务(核心步骤)
Windows 自带的服务管理功能对纯 Java 进程支持不好,我们需要借助第三方工具 WinSW (Windows Service Wrapper)。这是目前最轻量、最标准的做法。
- 下载 WinSW:
- 去 GitHub 搜索
winsw,下载最新版的WinSW-x64.exe。 - 把它放到你的项目目录下,重命名为
myproject.exe(名字要和后面的 xml 配置文件对应)。
- 去 GitHub 搜索
- 创建配置文件:
- 在同级目录下,新建一个 XML 文件,命名为
myproject.xml。 - 内容如下(根据实际修改):
- 在同级目录下,新建一个 XML 文件,命名为
<service>
<id>MyJavaProject</id> <!-- 服务名称 -->
<name>My Java Project Service</name> <!-- 显示名称 -->
<description>Spring Boot Application deployed on WinSW</description>
<!-- 可执行文件路径,指向刚才下载的 exe -->
<executable>%BASE%myproject.exe</executable>
<!-- 启动参数 -->
<arguments>-Xms512m -Xmx1024m -jar myproject.jar</arguments>
<!-- 工作目录 -->
<workingdirectory>%BASE%</workingdirectory>
<!-- 日志配置 -->
<log mode="roll"></log>
<!-- 依赖项(可选) -->
<!-- <depend>Tcpip</depend> -->
</service>
注意:%BASE% 是 WinSW 的环境变量,代表当前 exe 所在的文件夹。
- 注册并启动服务:
- 以管理员身份打开 CMD 或 PowerShell。
- 进入项目目录:
cd C:appmyproject - 安装服务:
.myproject.exe install - 启动服务:
.myproject.exe start - 或者直接用 Windows 服务管理器 (
services.msc) 找到 "My Java Project Service",设置为“自动”启动类型。
第四步:常见坑与优化
-
端口冲突:
- 如果 8080 被占,改
application.yml里的server.port。 - 别忘了在 Windows 防火墙里开新端口:
控制面板 -> Windows Defender 防火墙 -> 高级设置 -> 入站规则 -> 新建规则 -> 端口 -> TCP -> 特定本地端口 -> 允许连接。
- 如果 8080 被占,改
-
内存溢出 (OOM):
- 在 XML 的
<arguments>里调整 JVM 参数。 -Xms是初始堆大小,-Xmx是最大堆大小。建议设为物理内存的 1/4 到 1/2,具体看你的应用体量。- 例如:
-Xms1g -Xmx2g
- 在 XML 的
-
日志查看:
- WinSW 默认会把标准输出和错误输出重定向到日志文件。
- 在项目目录下找
.log后缀的文件,用 Notepad++ 或 VS Code 打开,实时跟踪异常。
-
性能调优(进阶):
- 如果是高并发场景,考虑开启 G1GC:添加参数
-XX:+UseG1GC。 - 关闭不必要的监控:
-XX:-PrintGCDetails等,减少 I/O 开销。
- 如果是高并发场景,考虑开启 G1GC:添加参数
总结流程
- 装 JDK。
- 打 Jar 包。
- 下 WinSW,写 XML 配置。
- 管理员 CMD 执行
install和start。 - 浏览器访问测试,看日志排查问题。
这套方案比 Tomcat 容器更轻量,资源占用更低,适合中小规模部署。如果遇到复杂集群或微服务,再考虑 Docker + Kubernetes,但在单机 Windows Server 上,WinSW 是最稳妥的选择。
CLOUD云计算