Tomcat之——宕机自动重启和每日定时启动tomcat

Tomcat之——宕机自动重启和每日定时启动tomcat在项目后期维护中会遇到这样的情况,tomcat在内存溢出的时候就出现死机的情况和遇到长时间不响应,需要人工手动关闭和重启服务,针对这样的突发情况,希望程序能自动处理问题而不需要人工关于,所以才有了目前的需求。一、设置tomcat定时启动1,首先将tomcat注册为服务,先打开tomcat的bin目录下service.bat文件,修改下面的值,这是sevvice的注册名称和显示名称,一般

大家好,又见面了,我是你们的朋友全栈君。

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/60587663

    在项目后期维护中会遇到这样的情况,tomcat在内存溢出的时候就出现死机的情况和遇到长时间不响应,需要人工手动关闭和重启服务,针对这样的突发情况,希望程序能自动处理问题而不需要人工关于,所以才有了目前的需求。

一、设置tomcat定时启动
1,首先将tomcat注册为服务,先打开tomcat的bin目录下service.bat文件,修改下面的值,这是sevvice的注册名称和显示名称,一般可使用默认值。
set SERVICE_NAME=Tomcat7 set PR_DISPLAYNAME=Apache Tomcat
【然后修改jvm大小,搜索到–JvmMs 128 –JvmMx 256 进行修改,因为做成服务启动,启动的时候就不会用到 catalina.bat,也就不会读取里面的jvm设置了。】(可选,可以不设置)
然后运行cmd命令窗口,cd 到tomcat的bin目录下,运行下面的命令 service.bat install 运行成功过后,会提示服务已经安装成功。
2,制作重启脚本restart.bat,文件内容如下 net stop Tomcat7 net start Tomcat7
3,利用控制面板里面的“任务计划”设置第2步的脚本运行时间计划
4,如果想删除服务,也很简单,先把服务停掉,然后在cmd窗口运行下面的命令即可,后面那个Tomcat7是服务名。 sc delete Tomcat7
需要注意的是,需要先把服务停掉,才能一次删除成功,或者删除之后再停止服务,就会发现服务已经删除成功了。
二、监听tomcat
 只要运行start.bat即可,相关配置在config.properties文件中,默认即可, 如果服务名不对应就修改关闭和启动命令的服务名即可:net start 【Tomcat7】括号中服务名,然后运行start.bat
下面是具体的监听代码:
首先是监听类TomcatMonitor .Java:

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 2017-03-06
 * @author liuyazhuang
 */
public class TomcatMonitor implements Runnable{
    
    String start=""; //系统命令 启动
    String stop=""; //系统命令 关闭
    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);
            stop=p.getProperty("stop");
            start=p.getProperty("start");
            testHttp=p.getProperty("testHttp");
            testIntervalTime=Integer.parseInt(p.getProperty("testIntervalTime"));
            waitIntervalTime=Integer.parseInt(p.getProperty("waitIntervalTime"));
            testTotalCount=Integer.parseInt(p.getProperty("testTotalCount"));           
        } catch (Exception e) {
                    e.printStackTrace();
        }
            
        System.out.println("*******************初始化成功!*******************");
         
        
        thread=new Thread(this);
        thread.start();     
    }
    
    public void run() {
        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){             
                try{      
                    //关闭tomcat服务    
                    Process proc = Runtime.getRuntime().exec(stop);
                    Thread.sleep(5000);
                    //启动tomcat服务
                    System.out.println("测试连接失败,正在重启tomcat");
                    Process p=Runtime.getRuntime().exec(start); 
                    System.out.println("重启tomcat成功");
                }catch(Exception e){
                    e.printStackTrace();
                    System.out.println("重启tomcat异常,请查看先关错误信息。。。。。");
                    
                }               
            }
            
            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();
    }

}

然后是对应的配置文件config.properties:

#系统命令 启动
start=net start Tomcat7

#关闭
stop = net stop Tomcat7

#测试连接总次数
testTotalCount=3

#连接失败时,再次检测时间间隔,单位为秒
testIntervalTime=3

#连接超时时间,即多少秒tomcat没响应视为宕机,单位为秒
connectionTimeout=15

#tomcat启动时间,防止在tomcat尚未启动完成的时候,程序又去检验tomcat状态,造成尚未启动完成又重新启动,单位为秒
tomcatStartTime=600

#测试连接地址
testHttp=http://127.0.0.1:8080

#正常情况下,每次检测间隔时间,单位为秒
waitIntervalTime=30

最后是启动的start.bat:

java -cp . TomcatMonitor

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163648.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • JSP程序设计习题4-3.6[通俗易懂]

    JSP程序设计习题4-3.6[通俗易懂]3、编写两个JSP页面inputString.jsp和computer.jsp,用户可以使用inputString.jsp提供的表单输入一个字符串,并停交给computer.jsp页面,该页面通过内置对象获取inputString.jsp页面提交的字符串,并且是该字符串的长度。inputString.jsp代码如下:<%@pagelanguage=”java”contentType…

  • 网页打印怎样分页

    网页打印怎样分页 在要分页的地方插入一个div, 其style为如下.PageNext即可&lt;stylemedia=print&gt;.Noprint{display:none;}.PageNext{page-break-after:always;}&lt;/style&gt; 

    2022年10月30日
  • 基于android点餐系统需求分析,基于Android的点餐系统的设计及实现

    基于android点餐系统需求分析,基于Android的点餐系统的设计及实现内容简介:基于Android的点餐系统的设计及实现,毕业论文,共58页,20083字,附开题报告、答辩文稿、源程序。摘要随着无线网络(如4G、3G、GPRS)及无线网络技术与移动操作系统的不断发展,移动生活逐渐成为社会的主流。现如今,许多餐饮企业仍然采用传统人工式服务,使服务质量、效率变得很差。为了改变这一现状,本设计将介绍一种基于Android的无线点餐系统。这种点餐系统包括服务器端与客户端,…

  • 利用bastille配置安全的linux系统

    利用bastille配置安全的linux系统

  • 惠普台式电脑如何安装系统_hp服务器快速重装系统

    惠普台式电脑如何安装系统_hp服务器快速重装系统惠普在计算机行业是一个很有声誉的品牌,无论是台式机还是笔记本,惠普都是一款值得考虑和购买的品牌产品之一。但是当计算机系统出了问题需要重装系统时,很多人并不知道如何进行系统的重装,那么惠普的台式机如何进行重装系统呢?今天小编将为大家介绍惠普台式电脑装系统步骤。惠普台式电脑装系统步骤阅读1、打开浏览器搜索云骑士官网,找到云骑士官网并点击打开。2、在官网下载云骑士一键重装系统软件,下载后打开云骑士装机大…

  • workbench mesh搅拌釜网格划分

    workbench mesh搅拌釜网格划分首先在scdm中创建几何模型导入workbenchmesh中进行划分,导出为msh格式网格即可单击mesh,调整参数,比如修改physics为CFD等 选中geometry第二个body,右击选择suppressbody,此时只剩下一个body 右击mesh,选择insertmethod,选择几何,选择默认参数 单击generatemesh,生成网格 单击第…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号