多模块Spring Boot项目中如何通过Maven并行启动所有Spring Boot应用
多模块Spring Boot项目中如何通过Maven并行启动所有Spring Boot应用
根据你的场景,确实有几种可行的方法来并行启动所有Spring Boot应用,不用一个个串行等待。下面是两种最适合你当前配置的方案:
方案一:用Spring Boot Maven插件的start/stop目标 + Maven并行构建
Spring Boot Maven插件提供了spring-boot:start和spring-boot:stop目标,其中start是非阻塞的(会把应用启动在后台),正好适合并行启动多个应用。
步骤:
- 确保端口不冲突:先确认每个应用的
server.port在各自配置文件里设为了不同值,否则启动时会出现端口占用报错。 - 执行并行启动命令:
这条命令会并行拉起所有6个应用,同时激活local配置(启用Docker Compose),自动构建依赖的模块:
参数说明:./mvnw spring-boot:start -pl app1,app2,app3,app4,app5,app6 -am -T 6 -Dspring.profiles.active=local-pl app1,app2,...:指定要启动的6个应用模块-am:自动构建这些模块依赖的所有前置模块(比如你的common模块)-T 6:用6个线程并行执行(对应6个应用,也可以用-T 6C表示基于6核分配线程数)-Dspring.profiles.active=local:激活local配置,启用application-local.yml里的Docker Compose开关
- 停止所有应用:
当需要停止时,执行这条命令即可优雅关闭所有应用:
插件会读取每个应用./mvnw spring-boot:stop -pl app1,app2,app3,app4,app5,app6target目录下的PID文件,精准停止对应进程。
注意事项:
- Docker Compose服务不会重复启动:第一个启动的应用会拉起共享服务(比如RabbitMQ),后续应用会自动检测到服务已运行,只启动自己专属的数据库服务(对应各自的profile),不会造成资源冲突。
- 每个应用的
application.yml要配置对应profile:比如app1的配置里docker.compose.profiles.active是rabbitmq,app1,app2的是rabbitmq,app2,确保启动时拉起正确的服务。
方案二:用Shell脚本批量后台启动(适合需要单独日志的场景)
如果你想更直观地管理每个应用的日志,或者需要自定义启动逻辑,可以写一个简单的Shell脚本,循环启动每个应用并后台运行。
示例脚本:
创建start-all-apps.sh文件:
#!/bin/bash # 定义所有应用模块 APPS=("app1" "app2" "app3" "app4" "app5" "app6") # 循环启动每个应用 for APP in "${APPS[@]}" do echo "Starting $APP... Logs will be saved to $APP.log" # 启动应用,日志单独保存,后台运行 ./mvnw spring-boot:run -pl "$APP" -am -Dspring.profiles.active=local > "$APP.log" 2>&1 & done # 等待用户停止信号 echo "All applications are starting in background. Press Ctrl+C to stop all apps..." # 捕获Ctrl+C,自动杀掉所有Spring Boot启动进程 trap 'pkill -f "spring-boot:run"' INT wait
使用方法:
- 给脚本添加执行权限:
chmod +x start-all-apps.sh - 运行脚本:
./start-all-apps.sh - 停止所有应用:直接按
Ctrl+C,脚本会自动终止所有启动的Spring Boot进程。
优点:
- 每个应用的日志单独保存在
app1.log、app2.log等文件中,方便单独排查问题 - 启动和停止逻辑更直观,适合本地开发调试时快速操作
额外注意点
- 端口唯一性:务必检查每个应用的
server.port配置,避免端口冲突导致启动失败 - 机器资源限制:如果你的机器内存/CPU有限,并行启动6个应用+多个Docker服务可能会卡顿,可适当减少并行线程数(比如
-T 4) - 热部署支持:如果你用了Spring DevTools,两种方案都能正常支持热部署,修改代码后应用会自动重启
备注:内容来源于stack exchange,提问作者DJViking
相关产品推荐
相关产品推荐

