You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过脚本运行多实例Spring Boot应用并批量发送POST请求

实现Spring Boot多实例自动化启动与批量请求发送

一、自动化启动20个递增端口的Spring Boot实例

可以通过脚本实现批量启动,以下是针对不同操作系统的方案:

Linux/macOS(Bash脚本)

创建start_instances.sh脚本,内容如下:

#!/bin/bash
START_PORT=8001
INSTANCE_COUNT=20

# 循环启动每个实例
for ((i=0; i<INSTANCE_COUNT; i++)); do
    PORT=$((START_PORT + i))
    echo "启动端口为${PORT}的Spring Boot实例..."
    # 后台运行并将日志输出到对应文件,同时记录进程ID
    mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=${PORT} > instance_${PORT}.log 2>&1 &
    echo $! > instance_${PORT}.pid
    # 预留启动缓冲时间,避免端口冲突或启动不完整
    sleep 3
done

echo "所有${INSTANCE_COUNT}个实例启动指令已下发,可查看对应日志文件确认启动状态。"

执行前赋予脚本权限:chmod +x start_instances.sh,然后运行:./start_instances.sh

Windows(批处理脚本)

创建start_instances.bat脚本,内容如下:

@echo off
setlocal enabledelayedexpansion
set START_PORT=8001
set INSTANCE_COUNT=20

for /l %%i in (0,1,%INSTANCE_COUNT%) do (
    set /a PORT=START_PORT + %%i
    echo 启动端口为!PORT!的Spring Boot实例...
    start "Instance_!PORT!" mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=!PORT!
    timeout /t 3 /nobreak > nul
)

echo 所有%INSTANCE_COUNT%个实例启动指令已下发。
endlocal

直接双击运行该批处理文件即可。

二、验证实例启动完成

为确保所有实例启动成功后再发送请求,可编写检查脚本(以Bash为例):

#!/bin/bash
START_PORT=8001
INSTANCE_COUNT=20

for ((i=0; i<INSTANCE_COUNT; i++)); do
    PORT=$((START_PORT + i))
    # 检查/actuator/health端点(需确保项目已引入spring-boot-starter-actuator)
    until curl -s http://localhost:${PORT}/actuator/health | grep -q "UP"; do
        echo "等待端口${PORT}的实例启动完成..."
        sleep 2
    done
    echo "端口${PORT}的实例已就绪。"
done

如果项目没有actuator,可替换为项目中某个启动后会正常响应的端点。

三、批量发送POST请求到每个实例的/someEndpoint

编写send_requests.sh脚本(Bash):

#!/bin/bash
START_PORT=8001
INSTANCE_COUNT=20
# 定义JSON请求体
JSON_BODY='{"param1": "value1", "param2": "value2"}'

for ((i=0; i<INSTANCE_COUNT; i++)); do
    PORT=$((START_PORT + i))
    echo "向端口${PORT}的实例发送POST请求..."
    curl -X POST http://localhost:${PORT}/someEndpoint \
         -H "Content-Type: application/json" \
         -d "${JSON_BODY}"
    echo -e "\n"
done

Windows环境可使用PowerShell脚本实现类似逻辑:

$startPort = 8001
$instanceCount = 20
$jsonBody = '{"param1": "value1", "param2": "value2"}'

for ($i=0; $i -lt $instanceCount; $i++) {
    $port = $startPort + $i
    Write-Host "向端口$port的实例发送POST请求..."
    Invoke-RestMethod -Uri "http://localhost:$port/someEndpoint" -Method Post -ContentType "application/json" -Body $jsonBody
}

注意事项

  • 确保8001-8020端口未被其他进程占用,可提前用netstat或ss命令检查。
  • 若20个实例占用资源过高,可在启动命令中添加JVM参数限制内存,例如:-Dspring-boot.run.jvmArguments="-Xmx512m"。
  • 日志文件和PID文件可用于后续查看启动状态或停止实例(通过kill $(cat instance_${PORT}.pid)终止对应进程)。

内容的提问来源于stack exchange,提问作者SA97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:03:20