如何使用 Windows 批处理文件逐个启动 Spring 启动 jar 文件?



我想使用 Windows 批处理文件逐个启动 Spring 启动 jar 文件。 我创建了一个批处理文件,如下所示:

start java -jar service1.jar --spring.profiles.active=local
start java -jar service2.jar --spring.profiles.active=local 

当我运行此批处理文件时,两个 jar 文件同时运行。 但是我必须先运行 service1.jar 文件,一旦它启动并运行,我需要运行 service2.jar 文件。

任何人都可以帮助我解决这个问题或任何其他方式吗?

一个非常简单的解决方案是在新的命令进程(在后台(中启动第一个服务,等待例如两秒钟,然后在退出当前命令进程之前,在新的命令进程(后台(中也启动第二个服务。

@echo off
start "Service 1" /B java.exe -jar service1.jar --spring.profiles.active=local
%SystemRoot%System32timeout.exe /T 2 /NOBREAK >nul
start "Service 2" /B java.exe -jar service2.jar --spring.profiles.active=local

要了解使用的命令及其工作原理,请打开命令提示符窗口,在那里执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • echo /?
  • start /?
  • timeout /?

在批处理文件中使用 start 不会等待该过程 - 这有点像启动一个新线程。

还有另一个函数调用(或启动/等待(,但如果不是服务,这些函数将起作用。您遇到的问题是服务需要继续运行(您不能等待它们通过 start/wait 完成(。

因此,您需要在批处理文件中实现某种条件和检查,当为 true 时,可以启动服务 2。例如,如果这是一个 Web 服务,并且有一个可用于检查它是否正常工作的 get 方法 - 调用该方法并在启动第二个服务之前等待结果。

您可以执行以下操作:

start java -jar service1.jar --spring.profiles.active=local
:isStarted
set ready=false // Here you implement some logic to check if the service is running
if %ready%=="false" goto isStarted
start java -jar service2.jar --spring.profiles.active=local

另一种解决方案是创建一个单独的 java 程序来测试 service1 并在它启动并运行时退出。如果我们称之为"service1test",那么您的蝙蝠文件将是:

start java -jar service1.jar --spring.profiles.active=local
service1test   - without using start so it can wait
start java -jar service2.jar --spring.profiles.active=local

最新更新