原文:Tomcat实现自动重启
源代码下载地址:http://www.zuidaima.com/share/1550463736564736.htm
中秋国庆马上来临,由于客户的服务器不是很稳定,导致应用经常崩溃,所以写了个重启tomcat的程序,拿来给大家分享。 java后台程序 上图:

大概思路是这样的: 1.监控服务器端是否能正常访问; 2.如果不能正常访问,则根据配置的信息来重新启动tomct服务 如果能正常访问则隔一段时间在监控。。。 其中用到了doc命令,代码注释很明确,不明白的可以问我
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Properties;
/**
* @describe:TomcatMonitor.java
*
* @date 2013-9-18
* @author 小C www.zuidaima.com
*/
public class TomcatMonitor implements Runnable{
String procName="tomcat6.exe"; //进程名称
//String fullProcName="C:\\Tomcat6\\bin\\tomcat6.exe";
String fullProcName=""; //tomcat6.exe绝对物理地址
//String command="cmd.exe /c start";
String command=""; //系统命令
//String testHttp="http://127.0.0.1:8080";
String testHttp=""; //测试连接地址
int testIntervalTime=1;//测试连接间隔时间,单位为秒
int waitIntervalTime=2; //等待测试间隔时间,单位为秒
int testTotalCount=5; //测试连接总次数
Thread thread=null;
public TomcatMonitor(){
InputStream in = TomcatMonitor.class.getResourceAsStream("config.properties");
Properties p = new Properties();
try {
p.load(in);
procName=p.getProperty("procName");
fullProcName=p.getProperty("fullProcName");
command=p.getProperty("command");
testHttp=p.getProperty("testHttp");
testIntervalTime=Integer.parseInt(p.getProperty("testIntervalTime"));
waitIntervalTime=Integer.parseInt(p.getProperty("waitIntervalTime"));
testTotalCount=Integer.parseInt(p.getProperty("testTotalCount"));
System.out.println("初始化成功!");
} catch (IOException e) {
e.printStackTrace();
}
thread=new Thread(this);
thread.start();
}
public void run() {
String[] cmd = {"tasklist"};
System.out.println("正在监控中...");
int testCount=0;
while(true){
testCount=0;
testCount++;
boolean isrun=test();
System.out.println("正在启动测试连接,尝试连接次数为:"+testCount+",结果为:"+(isrun==false?"失败.":"成功!"));
while(!isrun){
if(testCount>=testTotalCount)break;
try {
thread.sleep(testIntervalTime*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
testCount++;
System.out.println("正在启动测试连接,尝试连接次数为:"+testCount+",结果为:"+(isrun==false?"失败.":"成功!"));
isrun=test();
}
if(!isrun){
System.out.println("测试连接失败,正在重启tomcat");
try{
Process proc = Runtime.getRuntime().exec(cmd);
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String string_Temp = in.readLine();
while (string_Temp != null)
{
if(string_Temp.toLowerCase().indexOf(procName)!=-1){
Runtime.getRuntime().exec("Taskkill /f /im "+procName);
break;
}
string_Temp = in.readLine();
}
thread.sleep(5000);
Process p=Runtime.getRuntime().exec(command+" \"\" \""+fullProcName+"\"");
//Process p=Runtime.getRuntime().exec("net start tomcat6");
System.out.println("重启tomcat成功");
}catch(Exception e){
e.printStackTrace();
}
}
try {
thread.sleep(waitIntervalTime*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
isrun=test();
}
}
public boolean test(){
URL url=null;
try {
url = new URL(testHttp);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
URLConnection urlConn=url.openConnection();
urlConn.setReadTimeout(15000);
BufferedReader reader = new BufferedReader(new InputStreamReader( urlConn.getInputStream())); //实例化输入流,并获取网页代码
String s;
while ((s = reader.readLine()) != null) {
return true;
}
} catch (Exception e) {
return false;
}
return false;
}
public static void main(String[] args) throws Exception{
TomcatMonitor tm=new TomcatMonitor();
}
}