问题: 在JAVA WEB 项目中, 通过调用restart.bat批处理文件, 实现Tomcat重启问题
环境: Tomcat7 java1.8 windows10
背景: 启动Tomcat可以使用bin目录下的 startup.bat 进行启动,但是会有黑窗口,误触会导致项目停止运行,所以把Tomcat配置成了windows服务,使用windows服务启动。当使用服务的方式启动项目后,使用 Process process = Runtime.getRuntime().exec(“cmd /c start restart.bat”); 的方式执行restart.bat文件进行tomcat的重启,tomcat只能关闭启动不了; 但是双击执行 restart.bat 文件或者 使用 startup.bat 方式启动项目再执行restart.bat文件都是可以实现tomcat的重启, 为什么以服务的方式实现不了?
restart.bat源码
```bash
@echo off
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"
d:
cd \project\Tomcat1\bin
call shutdown.bat
ping -n 10 127.0.0.1
set port=8080
set pid=0
for /f "tokens=2,5" %%b in ('netstat -ano ^| findstr ":%port%"') do (
set temp=%%b
for /f "usebackq delims=: tokens=1,2" %%i in (`set temp`) do (
if %%j==%port% (
taskkill /f /pid %%c
set pid=%%c
echo 端口号【%port%】相关进程已杀死
) else (
echo 不是本机占用端口【%port%】
)
)
)
if !pid!==0 (
echo 端口号【%port%】没有占用
)
echo 操作完成
ping -n 10 127.0.0.1
net start Tomcat7
exit
java代码
Process process = Runtime.getRuntime().exec(“cmd /c start restart.bat”);
```