开发者社区 问答 正文

使用java代码启动Tomcat成功后连接不上数据库的问题

最近做一个监听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);
    }
}

启动时的报错信息:
7

展开
收起
落地花开啦 2016-03-25 18:44:22 7397 分享 版权
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    报错是找不到class,应该是你放在$TOMCAT_HOME/lib下的驱动包没有在类路径下(当然前提是你已经放了这个驱动包)。exec执行需要指定上下文路径到tomcat的bin目录还有环境变量什么的。

    我自己的经验是自己单独写个sh(你windows上就是bat),先cd到bin下设置好JAVA_HOME什么的必须的环境变量再去执行startup。而你JAVA程序只是执行你自己写的脚本,这样只要保证你的脚本能正常运行,一般比较少出问题,Java代码也不需要知道那么多细节。

    2019-07-17 19:14:57
    赞同 展开评论