Windows server服务器上部署Java服务?

在 Windows Server 上部署 Java 服务,通常是指将一个 Java 应用程序(如 Spring Boot、Java Web 应用等)部署为后台服务(Windows Service),使其在系统启动时自动运行,并在后台持续运行。以下是详细步骤:


一、准备工作

  1. 安装 Java 运行环境(JRE 或 JDK)

    • 下载并安装 Oracle JDK 或 OpenJDK(推荐使用长期支持版本,如 JDK 8、11、17)。
    • 设置环境变量:
      • JAVA_HOME:指向 JDK 安装目录(如 C:Program FilesJavajdk-17
      • %JAVA_HOME%bin 添加到 PATH 环境变量中。
    • 验证安装:
      java -version
  2. 准备你的 Java 应用

    • 打包为可执行的 JAR 文件(如 myapp.jar)。
    • 确保 JAR 文件可以通过命令行运行:
      java -jar myapp.jar

      测试应用是否能正常启动。


二、将 Java 应用部署为 Windows 服务

由于 Java 程序本身不是 Windows 服务,需要借助工具将其封装为服务。常用工具:

方法一:使用 NSSM(Non-Sucking Service Manager)——推荐

NSSM 是一个轻量、易用的工具,可将任意可执行程序包装为 Windows 服务。

  1. 下载 NSSM

    • 官网:https://nssm.cc/download
    • 下载 nssm-2.24.zip,解压后选择对应架构(win32 或 win64)的 nssm.exe
  2. 运行 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:
      • 可设置崩溃后自动重启。
  3. 启动服务

    net start MyJavaApp
  4. 管理服务

    • 查看服务状态:
      sc query MyJavaApp
    • 停止服务:
      net stop MyJavaApp
    • 删除服务(如需):
      nssm remove MyJavaApp

方法二:使用 Apache Commons Daemon(Procrun)

适用于更高级控制,适合企业级部署。

  1. 下载 Apache Commons Daemon
  2. 使用 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

注意:需要主类有 mainshutdown 方法支持。


三、配置与优化

  1. JVM 参数优化
    在启动参数中加入 JVM 调优:

    -Xms512m -Xmx2048m -XX:+UseG1GC

    例如在 NSSM 的 Arguments 中写:

    -Xms512m -Xmx2048m -jar "C:myappmyapp.jar"
  2. 日志输出

    • 建议将日志重定向到文件:
      -jar myapp.jar > C:myapplogsapp.log 2>&1
    • 或在应用内部使用 Logback / Log4j 配置日志路径。
  3. 防火墙设置

    • 如果服务监听端口(如 8080),需在 Windows 防火墙中放行该端口。
  4. 自动启动与恢复

    • 在服务属性中设置“启动失败时自动重启”。

四、验证部署

  1. 打开“服务”管理器(services.msc),查看 MyJavaApp 是否正在运行。
  2. 检查应用日志是否正常输出。
  3. 访问应用接口(如 http://localhost:8080/health)确认服务可用。
  4. 重启服务器,确认服务自动启动。

五、常见问题排查

问题 解决方法
服务启动后立即停止 检查 JAR 路径、Java 路径、JVM 参数是否正确;查看日志
找不到或无法加载主类 确保 JAR 是可执行 JAR(含 Main-ClassMANIFEST.MF
权限不足 使用管理员运行 NSSM,或为服务账户赋予足够权限
端口被占用 检查端口使用情况 netstat -ano | findstr :8080

六、补充建议

  • 使用 PowerShell 脚本自动化部署。
  • 结合任务计划程序或监控工具(如 Nagios、Zabbix)进行健康检查。
  • 考虑使用 Docker 容器化部署(Windows Server 2016+ 支持 Docker),更便于管理。

✅ 总结:
使用 NSSM 是在 Windows Server 上部署 Java 服务最简单、可靠的方式。只需几步骤即可将 .jar 文件变为开机自启、稳定运行的 Windows 服务。

如需,我可以提供一键部署脚本(批处理或 PowerShell)。是否需要?

未经允许不得转载:CCLOUD博客 » Windows server服务器上部署Java服务?