bat脚本启动Java服务

  • 1.终端cmd窗口运行jar
  • 2. bat脚本启动jar包
  • 3.后台启动bat脚本
  • 4. 运行bat只启动一次jar服务及停止脚本
  • 5.注意事项
  • 6.所用资源

1.终端cmd窗口运行jar

Java项目一般会被打包成jar后启动,在windows系统中可以通过终端窗口cmd启动jar包,即在jar包所在的目录中打开cmd,或在cmd中进入到jar包目录,执行如下命令:

java -jar myzhxy-1.0.0.jar
或
javaw -jar myzhxy-1.0.0.jar
// java.exe会在窗口中打印信息,而javaw.exe不会显示任何东西。

如果想指定jar包启动时用的配置文件,可用-Dspring.config.location指定配置文件路径,这样即可达到配置文件参数可修改的目的:

java -jar myzhxy-1.0.0.jar -Dspring.config.location=D:\config\application.properties

2. bat脚本启动jar包

创建一个bat文件,将上面的命令放入bat文件即可,之后只需要将bat和jar包放在同一个目录下,双击bat脚本即可启动jar包服务。

3.后台启动bat脚本

以上的bat脚本双击运行后会出现黑色cmd的终端窗口,若不想出现该窗口,可让其后台启动运行,这样就可以避免不小心关闭了创建运行,即可在脚本开头加入以下代码:

if "%1"=="h" goto begin
start mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin

4. 运行bat只启动一次jar服务及停止脚本

通过bat脚本后台启动jar服务后,可能会出现在启动之前,该服务要使用的端口已经被占用,或者说该服务已经被启动,则需要将被占用的端口释放掉,且事先需要判断该jar服务是否被启动,如果已经在启动状态,则不需要重新启动。

查找端口是否被占用,如果端口被占用则将该端口的进程杀掉:

netstat -ano |findstr 9001 // 根据端口号查进程
taskkill /f /pid 8224  // 根据进程id杀进程

由于端口有可能是被其他服务占用,所以要判断该jar服务是否被启动就不能再通过端口是否被占用来判断了。这时可以用wmic通过执行jar包的命令去查找进程(思路来源于:Java调用执行python脚本 )

wmic process where 'commandline like "%myzhxy-1.0.0.jar%"' get processid


但是,发现通过该命令查找的进程有两个,且将第一个杀掉之后,再次执行该命令查找进程还是能查到。
再次运行该bat,查找命令,同时将name查找出来,会发现,查出来两个进程id是因为wmic本身也算启了一个进程。即可通过执行器的name和执行命令一起查询进程id,杀掉之后再次查询出现没有可以实例即表明该服务已经被停止了:

wmic process where 'name = "java.exe" and commandline like "%myzhxy-1.0.0.jar%"' get processid,name


即,同理,停止jar服务的bat脚本也只能停止指定jar的服务,通过端口停止进程也有可能停止的是其他的服务。停止jar服务的bat脚本代码如下:

@echo offfor /f "usebackq skip=1 tokens=*" %%I in (`wmic process where "name = 'java.exe' and commandline like '%%myzhxy-1.0.0.jar%%'" get processid 2^>null`) do (echo %%Iif %%I GTR 1 (echo processid is: %%Iset pid=%%Igoto break)
):breakif defined pid (echo pid = %pid%echo taskkill /f /pid %pid%taskkill /f /pid %pid%echo Succeeded in killing the process.
) else echo The process does not exit.pause


则,只启动一次的,若jar服务已启动则不启动,没有启动则先查看端口是否被其他进程占用,占用则释放端口后再启动的bat脚本代码如下:

@echo offfor /f "usebackq skip=1 tokens=*" %%I in (`wmic process where "name = 'java.exe' and commandline like '%%myzhxy-1.0.0.jar%%'" get processid 2^>null`) do (if %%I GTR 1 (echo processid is: %%Iset pid=%%Igoto break)
)set port=9001
echo port=%port%for /f "usebackq tokens=1-5" %%a in (`netstat -ano ^|findstr %port%`) do (if [%%d] EQU [LISTENING] (set pid=%%e)
)if defined pid (echo pid = %pid%echo taskkill /f /pid %pid%taskkill /f /pid %pid%echo Succeeded in killing the process.
) else echo The process does not exit.echo java -jar myzhxy-1.0.0.jar
java -jar myzhxy-1.0.0.jar:breakpause

5.注意事项

  • bat语法中,不能想Java一样使用break来终止for循环,而是使用 goto的方式来跳出循环。
  • bat中 比较符号 表示如下:
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
  • bat中定义变量set port=9001 等号两边不能有空格,否则是错误命令行。
  • 使用wmic命令获取的进程,要判断是否获取到进程id不能判断其是否为空字符,且判断获取的%%I是否大于1,中%%I不能加中括号,[%%I],否则被当成字符形式,一直满足判断条件。导致终止不了for循环

6.所用资源

脚本资源

bat脚本启动Java服务相关推荐

  1. Windows环境使用bat脚本启动Redis服务

    一.编写脚本startup.bat启动Redis服务 @echo off title redis-server set ENV_HOME="D:\DevTools\Redis 5.0&quo ...

  2. windows bat脚本注册成服务

    windows bat脚本注册成服务 絮叨:最近在使用derby数据库编写项目,但是单机版本只能当前项目连接derby,想要工具连接项目中的derby只能开启网络版模式,网络版模式服务启动方式是个ba ...

  3. 使用bat脚本启动指定目录下的jar包

    为了将一个java程序封装成一个简单易用的小工具,使用bat脚本启动jar包. 方便理解,贴图展示层级关系: 在txt文档中,键入: @echo off java -jar %~dp0core\dem ...

  4. 使用DmAPService脚本启动dmap服务报错,报错信息:“failed to get ps!”

    问题描述 使用DmAPService脚本启动dmap服务报错,报错信息:"failed to get ps!" 排查解决 1.根据报错信息以及DmAPService服务脚本内容可以 ...

  5. 如何启动java服务以进程的方式启动

    1.如何启动java服务以进程的方式启动 在服务目录下(jar包目录下(服务名以transfer为例)),执行如下命令启动服务. nohup java -jar transfer.jar & ...

  6. start.bat怎么启动java项目_部署java项目为服务,设置开机自启动

    这是为小白定制的专属<Linux轻松上手>系列.涵盖了linux常用指令.shell脚本等核心内容,浅显易懂,配合实操案例快速上手.目标就是帮助大家轻松上手linux,少走弯路! 很多时候 ...

  7. Linux之shell脚本实现java服务的一键启动、停止、重启及每个服务单独的重启

    shell脚本提供了一键启动.停止.重启及每个服务单独的重启的函数. 脚本实现了: 调用sh文件根据不同的入参调用不同的函数 创建文件夹 创建文件 自定义函数调用自定义函数(调用函数时传入参数) 调用 ...

  8. 通过脚本启动批量服务

    /app/all_start_script/wwyt/此目录服务如下:apigateway.sh   auth.sh   config.sh   register.sh    zipkin.sh /a ...

  9. java bat 运行 jar文件_运行bat文件启动java的jar且不弹出DOS窗口,后台运行java的jar包...

    本文主要是将java的jar包启动的cmd命令添加到bat文件来执行,且不弹出DOS窗口,也就是后台运行java的jar包. 这里以win10为例 1.新建 一个txt文件,在文件添加以下内容.其中E ...

最新文章

  1. 百度搜索查询命令——组合型
  2. BS和CS的联系和区别
  3. mysql服务器的HA集群之corosync+drbd+pacemaker实现 上
  4. AngularJS笔记之创建服务方式比较 : factory vs service vs provider
  5. 腾讯云安装mysql本地主机名,腾讯云服务器上安装mysql,并用navicat连接
  6. 法兰克机械手手动操作_五轴伺服机械手手动操作
  7. Android学习摘要一之Android历史
  8. 深入理解this机制系列第三篇——箭头函数
  9. moss 自定义文档库文档图标
  10. mysql 利用延迟关联优化查询(select * from your_table order by id desc limit 2000000,20)
  11. LINUX的bash的一些特性
  12. nginx集群的搭建
  13. 算法与数据结构实战实验——线性数据结构实现与应用(使用java)
  14. Win7闪屏黑屏蓝屏解决办法
  15. iTween 用法总结
  16. uni-app的发展和应用
  17. 医用红外线灯的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. Android检测太极阴,太极阴xposed安卓最新版
  19. 微信公众号推送模板消息
  20. 计算机英语(61-90)

热门文章

  1. MyBatis入门(九)注解开发(下) PageHelper分页插件
  2. 天津大学计算机专硕_2018天津大学计算机考研复试分数线_计算机考研分数线
  3. 基于IPv6的配电自动化系统通信网络构架
  4. 顾问成长 3 --当你是虾米时要长骨格
  5. 解决:“操作无法完成因为其中的文件夹或文件已在另一程序中打开”无法删除文件的问题
  6. Kotlin by 关键字
  7. 自然语言处理中的几种文本预处理的写法总结
  8. 测试自动化中遵循的最佳实践
  9. AI数字人:语音驱动面部模型及超分辨率重建Wav2Lip-HD
  10. 遗传算法求解函数最小值问题