Windows系统下,通过编写批处理脚本实现SpringBoot项目的自启动

概要

Windows系统下,通过编写bat批处理脚本启动SpringBoot项目。

整体流程

  1. SpringBoot项目的开发,将项目通过Maven打成一个jar包。
  2. 准备一台Windows系统PC机,安装Java运行环境,以及服务运行所需的其他服务。
  3. 将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启动计划文件目录有两种,脚本需要赋予可执行的权限。

  1. 通过 shell:common startup 系统级别
  2. 通过 shell:startup 用户级别
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图个吉利儿

欢迎大家一起学习!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值