Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用windows批处理文件逐个启动spring引导jar文件?_Java_Batch File_Spring Boot - Fatal编程技术网

Java 如何使用windows批处理文件逐个启动spring引导jar文件?

Java 如何使用windows批处理文件逐个启动spring引导jar文件?,java,batch-file,spring-boot,Java,Batch File,Spring Boot,我想使用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

我想使用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文件


有谁能帮我解决这个问题或其他问题吗?

在批处理文件中使用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”,那么您的bat文件将是:

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

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

@echo off
start "Service 1" /B java.exe -jar service1.jar --spring.profiles.active=local
%SystemRoot%\System32\timeout.exe /T 2 /NOBREAK >nul
start "Service 2" /B java.exe -jar service2.jar --spring.profiles.active=local
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • echo/?
  • start/?
  • 超时/?

您可以尝试将
Start
/W
ait选项添加到第一个
.jar
中,或者将第一个
Start
一起删除。如果它不是一个服务,而是一个完成的进程,则可以使用SC命令和查询选项来测试服务是否启动。1。您的代码中的
21
是什么?2.我会在
:isStart
循环中包含
超时/t1/NOBREAK>nul
,以避免CPU负载过重(除非
deletefile.vbs
脚本已经包含睡眠命令)…输入错误;)很抱歉。这更像是一个伪代码