在windows批处理中顺序运行两个spring boot jar时,直接使用java -jar会导致第一个进程阻塞脚本执行,使第二个jar无法启动;正确做法是使用start /wait确保串行执行且不阻塞控制台。
在windows批处理中顺序运行两个spring boot jar时,直接使用java -jar会导致第一个进程阻塞脚本执行,使第二个jar无法启动;正确做法是使用start /wait确保串行执行且不阻塞控制台。
默认情况下,java -jar application1.jar 会以前台阻塞模式运行:批处理脚本会一直等待该Java进程退出(例如用户关闭应用或程序异常终止)后,才执行下一行命令。而Spring Boot应用默认以长生命周期服务形式运行(如内嵌Tomcat监听端口),通常不会主动退出——因此第二条 java -jar application2.jar 永远得不到执行机会。
✅ 正确解决方案:使用 start /wait 命令
start /wait 会在新窗口中启动进程,并阻塞当前批处理脚本,直到该窗口被关闭,从而实现真正的顺序执行:
@echo off echo Starting Application 1... start /wait java -jar application1.jar echo Starting Application 2... start /wait java -jar application2.jar echo Both applications have finished. pause
⚠️ 注意事项:
- /wait 参数至关重要:缺少它将导致两个JAR并行启动(非顺序),可能引发端口冲突(如均默认使用8080);
- 确保两个JAR配置了不同server.port(如application1.jar用8080,application2.jar用8081),否则第二个应用会因端口占用而启动失败;
- 若希望后台静默运行(不弹出CMD窗口),可改用 start /min /wait 或结合 javaw(但需注意:javaw 无控制台输出,调试困难);
- 推荐在JAR同目录下运行批处理文件,或使用绝对路径避免java.io.FileNotFoundException;
- 可添加错误检查增强健壮性:
start /wait java -jar application1.jar || (echo Error: Application 1 failed! & exit /b 1)
? 补充说明:网上部分方案建议仅用 start(无 /wait),这虽能启动两个应用,但属于并发执行,不符合“顺序”要求;而 start /wait 才真正满足“等第一个彻底结束后再启动第二个”的业务逻辑,适用于集成测试、本地联调等场景。

















