Tomcat服务器重启小工具—swing

来源:互联网 发布:淘宝店铺装修轮播 编辑:程序博客网 时间:2024/05/16 23:53

第一次写博文,跟大家一起学习分享,有诸多不足,望多多指教,大神轻轻指点。。。好了,回到正文。。。

最近在做一个web项目,老大提到一个问题,说Tomcat服务器如果挂掉了,我们应该能有一个程序来唤醒Tomcat服务器,而不是工作人员手动去操作(好吧,这确实是个问题)。O了,这就是基本需求。。。惊恐,对于新来的,应聘java开发却弄了两个礼拜Linux的我鸭梨山大啊!!!好吧,好好表现。。。

        首先是对核心功能的考虑,没有头绪的我首先想到度娘,事实证明度娘是很强大的,不多久就发现网上其实已经有关于这方面的代码,具体的实现思路为:用一个线程不断对web页面进行访问,然后判断,如果返回有值则说明Tomcat正常运行,无需其他操作;如果没有返回值,则继续判断进程中是否有tomcat7.exe这个进程,如果找到则说明服务器已经卡死,先关闭再开启Tomcat;如果进程中不存在则说明服务器还未启动,直接启动Tomcat。注:这里需将tomcat注册成服务,方便接下来对服务直接操作。核心思想就是这样了。。。大笑

       本着对于swing的特殊感情,并且希望大家都能方便使用的想法,用的是界面化的操作模式。界面实现用的是swing(虽然我知道这东西已经很难看到了可怜,下面有工具界面)

       下面看核心代码:

              1.先对需要访问的服务器web页面进行访问

try {           URL url = new URL(newURL);//读取传入的URL           URLConnection con = url.openConnection();//打开连接           in = new BufferedReader(new InputStreamReader(con.getInputStream()));//文件流读取           con.setConnectTimeout(overTime); //设置连接超时           con.setReadTimeout(4*overTime);//设置读取超时           while ((s = in.readLine()) != null)            {           if (s.length() > 0)            {        return ;//如能返回值则正常,返回           }           }           in.close();//关闭流       } catch (Exception e) {      // e.printStackTrace();       }       

               2.如若服务器没反应,到进程中查找,如果存在则关闭后启动,如果不存在则直接打开

       try {            Process p = Runtime.getRuntime().exec("tasklist");           in = new BufferedReader(new InputStreamReader(p.getInputStream()));           while ((s = in.readLine()) != null)            {              if (s.startsWith(t))               {                   isTomcatAlive = true;                   break;               }           }           in.close();        } catch (Exception e) {            e.printStackTrace();       }       if (isTomcatAlive)        {       tomcatInfo = tomcatInfo + nowDate + ":Tomcat is alive but not response!" + "\r\n";        logger.addlog(":Tomcat is alive but not response!" + "\r\n");       showLine = showLine + 1;           stopTomcat();//停止tomcat           try {Thread.sleep(1000);           } catch (InterruptedException e) {e.printStackTrace();           }       }       else       {       tomcatInfo = tomcatInfo + nowDate + ":Tomcat is not alive,Begin to start!" + "\r\n";        logger.addlog(":Tomcat is not alive,Begin to start!" + "\r\n");       showLine = showLine + 1;       startTomcat();       }    }
                       3.执行开启关闭Tomcat函数

    /**     * 停止Tomcat服务器     */    public void stopTomcat()     {       try {           Process p = Runtime.getRuntime().exec("net stop tomcat7");           BufferedReader in = new BufferedReader( new InputStreamReader(p.getInputStream()));           String s;           String t = "成功停止";           boolean restart = false;           while ((s = in.readLine()) != null)            {              if (s.indexOf(t) != -1) <span style="white-space:pre"></span>//判断返回值是否有              {                  restart = true;                  break;              }           }           tomcatInfo = tomcatInfo + nowDate + ":Tomcat is stop " + (restart ? "OK" : "ERROR") + "\r\n";           logger.addlog(":Tomcat is stop " + (restart ? "OK" : "ERROR") + "\r\n");       } catch (Exception e) {           e.printStackTrace();       }    }     /**     * 启动Tomcat     */    public void startTomcat()     {       try {       Process p = Runtime.getRuntime().exec("net stop tomcat7");       } catch (Exception e) {           e.printStackTrace();       }       try {           Process p = Runtime.getRuntime().exec("net start tomcat7");                      if(firstStart != 0)           {        secondStart = System.currentTimeMillis();           }           firstStart =  System.currentTimeMillis();                      BufferedReader in = new BufferedReader(                  new InputStreamReader(p.getInputStream()));           String s;           String t = "启动成功";           boolean restart = false;           while ((s = in.readLine()) != null)            {              if (s.indexOf(t) != -1)               {                  restart = true;                  break;              }           }           tomcatInfo = tomcatInfo + nowDate + ":Tomcat is start " + (restart ? "OK" : "ERROR") + "\r\n";           logger.addlog(":Tomcat is start " + (restart ? "OK" : "ERROR") + "\r\n");       } catch (Exception e) {           e.printStackTrace();       }    }
                 4.将该类放入线程

public void run() {while(true){try {Thread.sleep(startTime);<span style="white-space:pre"></span>//设置线程休眠时间
tListener.keepTomcatAlive(serverFileRoute.getText(), overTime);showArea.setText(tListener.tomcatInfo);restartTotalText.setText(String.valueOf(tListener.restartTime));//展示信息if(tListener.showLine >= 30){showArea.setText("");tListener.tomcatInfo = "";tListener.showLine = 0;}} catch (InterruptedException e) {e.printStackTrace();}}}


         上面说了核心功能,下面简单说下这个小工具后半段界面以及部分功能。其他功能主要有:1.日志写入2.配置文件操作3.托盘化。swing界面最后结果就如下图:

                                               

          其他功能代码由于比较多,就暂时不贴出来了。

         最后,基本功能已经全部实现,但是因为是本机测试,也没用过什么压力测试软件,不知道访问量过大会不会导致工具的其他问题,本来还想做个开机启动的,但是注册表已经写入,不知道为什么还是不会开机自启。。。接下来就没有继续研究了,有兴趣的大神要是知道,求告知。。。有兴趣的可以留言交流。




0 0