Windows下批量启动/关闭java程序
最近公司要将一批微服务部署到windows server
上,对于微服务项目来说,一次要部署多个jar
包是让人崩溃的,所以这里想做一个批量运行\停止的脚本。
批量启动:
- 在
cmd
下,java -jar ####.jar
运行后窗口不能关闭,但是有多个jar
包,则会开启多个cmd
窗口,非常难受。 - 在
cmd
下,javaw -jar ####.jar
运行后窗口可以关,但如果有多个jar
,就回存在进程中有许多相同的javaw
进程,无法区分是哪个jar
,很难去关闭特定某个jar
的进程。
如何解决
- 为了解决多个
cmd
窗口的问题;通过bat
文件批量执行jar
文件,每个包用start javaw -jar ####.jar
来运行。 - 为了解决进程难以区分问题;通过复制
javaw.exe
为对应jar包的文件名称来执行jar
包,比如eureka.jar
,复制javaw.exe
为eureka.exe
,然后start eureka -jar eureka.jar
,这样进程中就是eureka
。 - 如果
jar
之间有执行依赖,则通过ping
来给前一个jar
提供执行时间。
案例如下
@echo off
set javaw="%JAVA_HOME%\bin\javaw.exe"
echo ******start qis-eureka.jar******
set eureka="%JAVA_HOME%\bin\eureka.exe"
rem 复制文件
if not exist %eureka% (
copy %javaw% %eureka%
)
start eureka -jar qis-eureka-0.0.1.jar
rem 等待8秒,ping一次1秒
ping -n 8 127.0.0.1>nul
echo ******start qis-getway.jar******
set getway="%JAVA_HOME%\bin\getway.exe"
if not exist %getway% (
copy %javaw% %getway%
)
start getway -jar qis-getway-0.0.1.jar
exit
批量停止
在上面我们知道为每个jar
制定了进程的名称,于是,停止的脚本如下:
@echo off
taskkill /f /t /im eureka.exe
taskkill /f /t /im getway.exe
exit