加油
努力

Windows Server环境下如何通过服务方式启动Java后台应用?

在 Windows Server 环境下,将 Java 后台应用以服务方式启动,可以确保应用随系统自动启动、后台稳定运行,并便于管理和监控。以下是几种常用的方法:


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

NSSM 是一个轻量级、开源的工具,可将任意可执行文件(包括 Java 应用)封装为 Windows 服务。

步骤:

  1. 下载 NSSM

    • 官网:https://nssm.cc/download
    • 下载 nssm-2.24.zip 或最新版本,解压后选择对应系统架构(x64/x86)中的 nssm.exe
  2. 运行 NSSM(以管理员身份)

    nssm install MyJavaApp

    MyJavaApp 是你自定义的服务名称。

  3. 配置服务参数(图形界面)
    在弹出的窗口中填写以下信息:

    • Path: java 的完整路径(如:C:Program FilesJavajdk-17binjava.exe
    • Arguments: 启动 Java 应用的参数,例如:
      -jar "D:myappmyapp.jar" --spring.profiles.active=prod
    • Startup directory: Java 应用所在的目录(如:D:myapp
  4. 设置日志(可选)

    • 转到 I/O 标签页,设置:
      • Output (stdout): D:logsmyapp.log
      • Error (stderr): D:logsmyapp_error.log
      • 勾选“Rotate logs”
  5. 点击 Install service

  6. 启动服务

    net start MyJavaApp

    或通过“服务”管理器(services.msc)启动。

  7. 设置开机自启

    • 默认安装为“自动”启动类型,可在服务属性中确认。

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

适用于更正式的部署环境,支持丰富的服务控制选项。

步骤:

  1. 下载 Commons Daemon

    • https://commons.apache.org/proper/commons-daemon/
    • 下载 commons-daemon-x.x.x-bin.zip
    • 解压后获取 prunsrv.exe(64位系统用 x64 版本)
  2. 创建服务安装脚本(install.bat)

    @echo off
    set SERVICE_NAME=MyJavaApp
    set PR_INSTALL=C:pathtoprunsrv.exe
    set PR_JAR_PATH=D:myappmyapp.jar
    set PR_LOG_PATH=D:logs
    set JAVA_HOME=C:Program FilesJavajdk-17
    
    "%PR_INSTALL%" //IS//%SERVICE_NAME% ^
      --DisplayName="My Java Application" ^
      --Description="A Java backend application" ^
      --Startup=auto ^
      --Install="%PR_INSTALL%" ^
      --Jvm="%JAVA_HOME%binserverjvm.dll" ^
      --StartMode=jvm ^
      --StopMode=jvm ^
      --StartClass=org.springframework.boot.loader.JarLauncher ^
      --StartParams="-jar;%PR_JAR_PATH%" ^
      --LogPath="%PR_LOG_PATH%" ^
      --StdOutput="%PR_LOG_PATH%stdout.log" ^
      --StdError="%PR_LOG_PATH%stderr.log"
  3. 运行 install.bat(以管理员身份)

  4. 启动服务

    net start MyJavaApp
  5. 卸载服务

    prunsrv //DS//MyJavaApp

✅ 方法三:使用 PowerShell + sc 命令(高级)

直接使用 Windows 自带的 sc 命令创建服务(需配合 .bat 启动脚本)。

  1. 创建启动脚本 start.bat

    @echo off
    cd /d D:myapp
    java -jar myapp.jar --spring.profiles.active=prod
  2. 创建服务

    sc create MyJavaApp binPath= "D:myappstart.bat" start= auto DisplayName= "My Java App"

⚠️ 注意:这种方式不推荐用于长期运行的应用,因为 sc 不会监控进程崩溃重启,且日志处理较弱。


🔧 其他建议

  • JVM 参数优化

    -Xms512m -Xmx2g -Dfile.encoding=UTF-8

    可添加到 Arguments 中。

  • 日志监控:结合 Windows Event Log 或 ELK/Splunk 等工具。

  • 权限问题

    • 确保服务运行账户有足够权限(推荐使用 Local System 或专用域账户)。
    • 在服务属性 → “登录”选项卡中设置。
  • 防火墙/端口:确保应用监听的端口(如 8080)在防火墙中开放。


✅ 验证服务是否运行

sc query MyJavaApp

或打开 services.msc 查看服务状态。


总结

方法 推荐度 优点 缺点
NSSM ⭐⭐⭐⭐⭐ 简单易用,功能全,社区支持好 需额外工具
Procrun ⭐⭐⭐⭐ Apache 官方,企业级 配置复杂
sc + bat ⭐⭐ 无需第三方工具 功能弱,难维护

📌 推荐使用 NSSM,适合大多数 Java 后台应用部署场景。

如有 Spring Boot 应用,还可考虑打包为 EXE(使用 launch4j + wrapper),但服务化仍推荐上述方法。

云服务器