我需要从Java代码重启tomcat。
例如,如果查询没有执行一段时间,那么它将自动重启tomcat。
我尝试了以下关闭和启动代码,但是当我们关闭tomcat时,java代码将无法运行且tomcat无法启动。
注意: - 我正在从应用程序运行此代码并重新启动相同应用程序正在使用的相同tomact。
遵循代码
try {
PreparedStatement.setQueryTimeout(10);
rs = PreparedStatement.executeQuery();
} catch (SQLException ex) {
System.out.println("IN CATCH BLOCK FOR THE REFRESH INVOICE");
String shutcommand = "killall java";
Process shutchild = Runtime.getRuntime().exec(shutcommand);
System.out.println("JAVA PROCESS KILLED");
String locationCommand = "cd /root/cluster/tomcat6/bin";
Process locationChild = Runtime.getRuntime().exec(locationCommand);
String strtcommand = "./startup.sh";
Process strtchild = Runtime.getRuntime().exec(strtcommand);
}
答案 0 :(得分:0)
在SQLException之后杀死tomcat这不是一个好主意来处理这个异常。可能问题出在数据库网站上。
但是如果你确定,这是你需要的,你可以在本节中杀死这个java进程,但是要运行tomcat,你应该使用例如bash和cron。为什么?杀死执行代码后的beacues将停止,因此你没有实现启动tomcat的行。
如何检查tomcat:Is Tomcat running?
答案 1 :(得分:0)
TL; DR
File binaryDir = new File(System.getProperty("catalina.home") + File.separator + "bin");
String restartCommand = "\"shutdown.bat & ping 0.0.0.0 -n 4 & C:\\WINDOWS\\system32\\net start Tomcat8\"";
new ProcessBuilder("cmd", "/c", restartCommand).directory(binaryDir).start();
生存
创建新进程将在JVM关闭后继续存在。如果将命令合并在一行中 根据我的测试和this,它应该可以正常工作。
shutdown.bat
您需要使用shutdown.bat而不是停止Windows服务,因为它在Windows上经常失败,并显示消息Cannot stop service Apache Tomcat...
ping 0.0.0.0 -n 4
关机后需要等待一段时间,否则会收到Service is already starting. Try again later
错误消息。还要注意,我使用ping
代替timeout
,因为它在某些系统上会引起问题。
C:\ WINDOWS \ system32 \ net启动Tomcat8
我正在启动Windows服务,因为调用startup.bat
对我不起作用。另外,如果您使用不同的tomcat或自定义服务名称,例如Tomcat8
Tomcat7
重定向I / O
不重定向流程实例或命令的输入或输出将通过JVM关闭,并且Tomcat无法启动。
答案 2 :(得分:-2)
您可以使用java
执行此本机命令String command = "c:\program files\tomcat\bin\startup.bat";//for linux use .sh
Process child = Runtime.getRuntime().exec(command);
答案 3 :(得分:-3)
您应该考虑使用ProcessBuilder
而不是Runtime exec
。此外,您还应该在要执行命令时拆分所有参数。
我建议:
ProcessBuilder shutcommand = new ProcessBuilder("killall", "java");
Process shutchild = shutcommand.start();
System.out.println("JAVA PROCESS KILLED");
ProcessBuilder strtcommand = new ProcessBuilder("/root/cluster/tomcat6/bin/startup.sh", "java");
Process strtchild = strtcommand.start();