使用 Apache Commons Daemon(Procrun / prunsrv) 将 Spring Boot 应用安装为 Windows 服务 的示例工程:通过独立入口类 Bootstrap(继承 Spring Boot JarLauncher)配合 start / stop 参数,由服务控制管理器在守护进程环境下启动与停止内嵌 Web 容器。
| 项目 | 版本(以本仓库为准) |
|---|---|
| JDK | 1.8(pom.xml 中 java.version) |
| Spring Boot | 2.7.11(spring-boot-starter-parent) |
| 构建 | Maven 3.x |
| 运行环境 | Windows(服务安装与 Procrun 仅适用于 Windows) |
在仓库根目录执行:
mvn clean package成功后,可执行 JAR 为:
target/procrun-demo-0.0.1.jar
将上述 JAR 复制/覆盖 到 install 目录下,文件名需与 install.bat 中一致:procrun-demo-0.0.1.jar。
本仓库 不包含 prunsrv.exe。请从 Apache Commons Daemon 二进制发布页 获取 Windows 对应架构的 prunsrv.exe,放到 install 目录(与 install.bat 同级)。
JDK:install.bat 中示例路径为 install\java\jdk1.8.0_271\...(Windows 下路径大小写不敏感)。完整 JDK 体积大,建议自备 JDK 8,解压到上述相对路径,或修改 install.bat 中的 --Jvm / --Classpath 等参数指向你的环境。install/Java/(或 install/java/)已加入 .gitignore,请勿把完整 JDK 提交到版本库;若历史上曾误提交,可用 git rm -r --cached install/Java(或你的实际目录名)从索引中移除并保留本地文件。
安装与删除 Windows 服务需要提升权限:
- 在「开始」菜单中找到 命令提示符 或 PowerShell,右键 → 以管理员身份运行。
cd到本仓库的install目录后执行:
| 脚本 | 作用 |
|---|---|
install.bat |
安装服务(内部使用 prunsrv //IS//...) |
uninstall.bat |
卸载服务(prunsrv //DS//...) |
run.bat |
启动服务(prunsrv //ES//...) |
stop.bat |
停止服务(prunsrv //SS//...) |
请勿在未提权的环境下强装服务,否则常见报错为拒绝访问或无法注册服务。
浏览器访问:http://127.0.0.1:9909/(端口见 src/main/resources/application.properties 中 server.port)。首页由 HomeController 提供,返回文本 procrun demo。
| 内容 | 说明 |
|---|---|
install.bat / uninstall.bat |
注册或删除名为 procrun-demo 的 Windows 服务 |
run.bat / stop.bat |
启动 / 停止已安装的服务 |
procrun-demo-0.0.1.jar |
部署的 Spring Boot fat jar(需自行从 mvn package 复制过来) |
prunsrv.exe |
Procrun 服务包装程序(需自备) |
java\... 或自备 JDK 路径 |
install.bat 中 --Jvm 指向的 jvm.dll |
logs\ |
install.bat 中 --LogPath 指向的目录(与 install 同级下的 logs),服务日志由 prunsrv 按级别与滚动策略写入;标准输出/错误见脚本中 --StdOutput / --StdError |
- 服务名称(内部名):
procrun-demo(与install.bat中//IS//后名称一致) - 显示名称:
procrun-demo - HTTP 端口:9909
-
安装/卸载提示权限不足
使用管理员命令行执行install.bat/uninstall.bat。 -
找不到 JVM / 服务无法启动
检查install.bat中--Jvm=...\jvm.dll是否与机器上 JDK 路径一致;修改后若服务已安装,可用prunsrv //US//procrun-demo ...更新参数(详见仓库根目录BLOG.md)。 -
防火墙拦截
需入站放行 TCP 9909(或你修改后的server.port)。 -
更新 JAR
停止服务 → 用新构建的 jar 覆盖install下同名文件 → 再启动服务。 -
prunsrv不是内部或外部命令
将prunsrv.exe放到install目录,或在 PATH 中可访问的位置,且执行脚本时当前目录为install(脚本内使用相对路径依赖当前工作目录)。
更完整的步骤说明、日志查找方式与排错思路见 安装和使用教程.md。
- Apache Commons Daemon(Procrun 文档)
- 实践与背景介绍见 BLOG.md