概要
Windows系统下,通过编写bat批处理脚本启动SpringBoot项目。
整体流程
- SpringBoot项目的开发,将项目通过Maven打成一个jar包。
- 准备一台Windows系统PC机,安装Java运行环境,以及服务运行所需的其他服务。
- 将bat批处理脚本文件复制到,Windows启动计划文件目录下,实现系统启动即加载的效果。
脚本实现
方案一:非交换式
@echo off
rem This is a "xxxxProject" program.
rem 定义最大尝试次数
set MAX_ATTEMPTS=30
rem 初始化尝试次数
set ATTEMPT=0
rem 设置服务端口号
set port=8080
rem 获取当前主机的所有端口号,循环判断当前端口是否已开启
for /f "usebackq tokens=1-5" %%a in (`netstat -ano ^| findstr %port%`) do (
if [%%d] EQU [LISTENING] (
set pid=%%e
)
)
rem 循环PID,执行对应的方法
if "%pid%" == "" goto start
if not "%pid%" == "" goto run
:run
echo %port% (程序运行中)port is opening...
pause
exit
:start
echo (开始启动程序)starting collect program...
rem 配置jar包绝对路径
start javaw -jar C:\Users\xing\Desktop\xxx\xxx.jar --spring.profiles.active=prod
echo Starting Success!
rem 后台启动服务,通过循环方法,判断服务是否启动成功
goto LOOP
echo=
:LOOP
rem 等待一段时间,以便项目有足够的时间启动
ping 127.0.0.1 -n 6 > nul
set /A ATTEMPT+=1
rem 使用 curl 命令检查服务端点是否可访问(需要先确保 curl 已安装)
curl -s http://localhost:8080 > nul
if %errorlevel% == 0 (
echo The server has been successfully started and the web service is accessible.
goto END
) else (
echo The server has not started or the web service is not accessible.
)
rem 检查是否达到最大尝试次数
if %ATTEMPT% LSS %MAX_ATTEMPTS% (
goto LOOP
) else (
echo Failed to start the server or access the web service after %MAX_ATTEMPTS% attempts.
goto END
)
:BUILEDER
start
:END
方案二:交换式
@echo off
set SPRING_BOOT_JAR=xxx.jar
rem 定义最大尝试次数
set MAX_ATTEMPTS=30
rem 初始化尝试次数
set ATTEMPT=0
:: 显示菜单
echo.
echo ================================
echo 请选择操作:
echo 1. 启动服务
echo 2. 关闭服务
echo 3. 重启服务
echo 4. 退出
echo ================================
:menu
set /p choice=请输入选项 (1/2/3/4):
if "%choice%"=="1" goto startApp
if "%choice%"=="2" goto stopApp
if "%choice%"=="3" goto restartApp
if "%choice%"=="4" goto exitScript
echo 无效选项,请重新输入.
goto menu
:LOOP
rem 等待一段时间,以便项目有足够的时间启动
ping 127.0.0.1 -n 6 > nul
set /A ATTEMPT+=1
rem 使用 curl 命令检查服务端点是否可访问(需要先确保 curl 已安装)
curl -s http://localhost:8080 > nul
if %errorlevel% == 0 (
echo The server has been successfully started and the web service is accessible.
goto END
) else (
echo The server has not started or the web service is not accessible.
)
rem 检查是否达到最大尝试次数
if %ATTEMPT% LSS %MAX_ATTEMPTS% (
goto LOOP
) else (
echo Failed to start the server or access the web service after %MAX_ATTEMPTS% attempts.
goto END
)
:END
echo 服务启动成功!
pause
goto menu
:startApp
echo 正在启动服务...
start javaw -jar %SPRING_BOOT_JAR% --spring.profiles.active=prod
goto LOOP
pause
goto menu
:stopApp
echo 正在查找并停止服务的Java进程...
for /f "tokens=1 delims= " %%a in ('jcmd ^| findstr %SPRING_BOOT_JAR%') do set PID=%%a
echo Project PID: %PID%
taskkill /PID %PID% /F
if %errorlevel% equ 0 (
echo Spring Boot应用已停止。
) else (
echo 无法停止服务,可能没有找到对应的进程。
)
if not defined PID (
echo 没有找到运行中的服务。
)
pause
goto menu
:restartApp
call :stopApp
timeout /t 2 >nul :: 等待2秒以确保应用已完全停止
goto startApp
goto menu
:exitScript
echo 退出。
exit
小结
通过本次的学习,可以大概了解Windows系统下如何实现,批处理脚本启动服务,简单了解是bat的脚本的编写。
注意:快速打开Windows启动计划文件目录有两种,脚本需要赋予可执行的权限。
- 通过 shell:common startup 系统级别
- 通过 shell:startup 用户级别