最近做一个监听Tomcat的程序,监听Tomcat服务是否挂掉,如果挂掉,就使用代码重启Tomcat服务,具体的功能是实现了,当检测到Tomcat挂掉后,我是通过Runtime.getRuntime().exec("路径\startup.bat")的方式去启动服务,服务能够被启动,可是却连接不上数据库,手工去点击Tomcat目录下的startup.bat是能连接数据库的,不知道手工启动和在程序里面被调用启动有什么区别,还是跟Tomcat的启动机制有什么关联,奇怪的是在我本机能连接上数据库,放在服务器上就不行了,希望各位朋友能够帮忙看看,在此谢过了。
服务器启动了4个Tomcat,所以我用4个线程去监听
/**
* 多线程监听tomcat服务器是否响应正常
* @author Thnkpad-Rong
*
*/
public class ThreadListenTomcat extends TimerTask{
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//启动线程进行监听
@Override
public void run() {
System.out.println("--------------------"+df.format(new Date())+"--------------------");
new Thread(new ListenTomcatStatus("8082"),"8082").start();
new Thread(new ListenTomcatStatus("8084"),"8084").start();
new Thread(new ListenTomcatStatus("8085"),"8085").start();
new Thread(new ListenTomcatStatus("8083"),"8083").start();
}
}
最后是定时程序,每隔两分钟监听一次
/**
* 监听主程序
* @author Thnkpad-Rong
*
*/
public class ExceListen {
public static void main(String[] args) {
//使用Timer进行定时监视Tomcat
Timer timer = new Timer();
timer.schedule(new ThreadListenTomcat(), 0, 2*60*1000);
}
}
启动时的报错信息:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
报错是找不到class,应该是你放在$TOMCAT_HOME/lib下的驱动包没有在类路径下(当然前提是你已经放了这个驱动包)。exec执行需要指定上下文路径到tomcat的bin目录还有环境变量什么的。
我自己的经验是自己单独写个sh(你windows上就是bat),先cd到bin下设置好JAVA_HOME什么的必须的环境变量再去执行startup。而你JAVA程序只是执行你自己写的脚本,这样只要保证你的脚本能正常运行,一般比较少出问题,Java代码也不需要知道那么多细节。