免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1861 | 回复: 0
打印 上一主题 下一主题

tomcat 监控器和定时器 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-27 11:53 |只看该作者 |倒序浏览
package cn.yicha.timer;
import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.Timer;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import org.apache.log4j.Logger;
import cn.yicha.ask.AskBaidu.AskBaidu_Inti;import cn.yicha.common.*;//import jp.yicha.video.action.IndexAction;
public class MainTimerListener implements ServletContextListener {    //public static final Logger logger = Logger.getLogger(MainTimerListener.class.getName());    private static Logger logger = Logger.getLogger(MainTimerListener.class);        private Timer timer = null;
        public void contextInitialized(ServletContextEvent event) {                try{                // 在这里初始化监听器,在tomcat启动的时候监听器启动,可以在这里实现定时器功能                Const.load();                int startHour = Integer.parseInt(Const.TimerStart);                int periodHour = Integer.parseInt(Const.TimerPeriod);                //renyy add method                AskBaidu_Inti.askinit();                //renyy add method                Calendar c = Calendar.getInstance();                c.add(Calendar.DATE,1);                c.set(Calendar.HOUR_OF_DAY,startHour);                c.set(Calendar.MINUTE,0);                c.set(Calendar.SECOND,0);                c.set(Calendar.MILLISECOND,0);                Date start = c.getTime();
//                long delay = start.getTime() - System.currentTimeMillis();//tomcat启动后间隔1000毫秒启动                                long period = periodHour * 60 * 60 * 1000;        //间隔                //long period =  10000;//                long period = 1000*60*10;                                                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");                                 timer = new Timer(true);                logger.info("Listener Start--> Time:"+sdf.format(new Date()));                System.out.println("开始时间:"+start+"间隔时间:"+period);                                Calendar cal = Calendar.getInstance();                Date t = cal.getTime();                if(cal.get(Calendar.HOUR_OF_DAY) > 5){                        cal.set(Calendar.HOUR_OF_DAY, 6);                        cal.set(Calendar.MINUTE, 0);                        cal.set(Calendar.SECOND, 0);                        cal.set(Calendar.MILLISECOND, 0);                        t = new Date(cal.getTimeInMillis()+24*60*60*1000L);                }                else{                        cal.set(Calendar.HOUR_OF_DAY, 6);                        cal.set(Calendar.MINUTE, 0);                        cal.set(Calendar.SECOND, 0);                        cal.set(Calendar.MILLISECOND, 0);                        t = cal.getTime();                }                timer.schedule(new MainTask(), t, 24*60*60*1000L);// 调用MainTask                timer.schedule(new AskBaiduTask(), new Date(), 60*1000L);                                //debug                //timer.schedule(new MainTask(), 1*60*1000, 1*60*1000);// 调用MainTask                logger.info("Listener End--> Time:"+sdf.format(new Date()));                }catch(Exception e){                        logger.error("Listener Error+++++++++++++++++++++++++++++++++:", e);                        e.printStackTrace();                }        }
        public void contextDestroyed(ServletContextEvent event) {//在这里关闭监听器,所以在这里销毁定时器。                //renyy add method                AskBaidu_Inti.saveQueue();                //renyy add method                timer.cancel();                logger.info("Listener destroy!");        }}
package cn.yicha.timer;
import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.sql.ResultSet;import java.sql.SQLException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.TimerTask;
import org.apache.log4j.Logger;
import cn.yicha.ask.expert.Candidate;import cn.yicha.ask.user.Db;import cn.yicha.common.Const;
public class MainTask extends TimerTask {    public static final Logger logger = Logger.getLogger(MainTask.class.getName());
    private static boolean isRunning = false;//任务正在执行标志,以避免重复执行
        public MainTask() {                          }         /**         * 自动评选专家         * @param db          */        private void assessExpert(Db db) {                backData(db);                Candidate candidate = new Candidate();                candidate.update();                        }                /**         * 备份专家表到XML文件         * @param db          */        private void backData(Db db) {                StringBuffer sql = new StringBuffer();                sql.append("SELECT e.id,e.user_id,e.nick_name,c.name,e.add_time,e.answer,e.best_answer,e.level,e.fast_answer ")                        .append(" FROM t_qa_expert AS e LEFT JOIN t_qa_question_category  AS c ON e.cate_id=c.id " )                        .append("WHERE e.state=0 ORDER BY e.cate_id ,e.answer DESC ,e.best_answer DESC ");                                ResultSet rs = db.executeQuery(sql.toString());                File backFile = getBackFile();                BufferedWriter output = null;                try {                        output = new BufferedWriter(new FileWriter(backFile));                        while(rs.next()){                                StringBuffer readLine=new StringBuffer();                                readLine.append( rs.getString(1)+"\t")                                        .append(rs.getString(2)+"\t")                                        .append(rs.getString(3)+"\t")                                        .append(rs.getString(4)+"\t")                                        .append(rs.getString(5)+"\t")                                        .append(rs.getString(6)+"\t")                                        .append(rs.getString(7)+"\t")                                        .append(rs.getString(8)+"\t")                                        .append(rs.getString(9)+"\t\n");                                output.write(readLine.toString());                        }                        output.close();                } catch (IOException e1) {                        e1.printStackTrace();                } catch (SQLException e) {                        e.printStackTrace();                }finally{                                                        try {                                        if(output != null){                                        output.close();                                        }                                } catch (IOException e) {                                        e.printStackTrace();                                }                        }        }
        private File getBackFile() {                Calendar cal = Calendar.getInstance();                int year = cal.get(Calendar.YEAR);                int month = cal.get(Calendar.MONTH);                return new File(Const.ExpertBackFilePath+"ExpertBackFile"+year+month+".txt");        }
        public void run() {                //Calendar c = Calendar.getInstance();                //System.out.println("123456789");                try{                        if (!isRunning) {                                isRunning = true;                                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");                                System.out.println("Task start-->Time:"+sdf.format(new Date()));                                logger.info("Task start-->Time:"+sdf.format(new Date()));                                                                String start = getStartOfMonth();                                String end = getEndOfMonth();                                logger.info("Task start-->Time:" + start + " end:" + end);                                                                Db db=Db.getSelf();                                if(isOneDay()){                                        assessExpert(db);                                }                                String sql="";                                sql=" update t_qa_expert aa  join (select a.id,count(*) sum1 from t_qa_expert  a join t_qa_answer b on a.user_id=b.user_id where a.state=0   and b.verify='10'  and answer_time between '2008-11-01 00:00:00' and '2009-01-31 11:59:59' and  b.question_id in (select c.question_id from t_qa_question   c,t_qa_question_category   d where c.category=d.id and (d.parent_id=a.cate_id or d.id=a.cate_id))  group by a.user_id,a.cate_id ) ee on aa.id=ee.id  set answer=ee.sum1";                                sql=" update t_qa_expert aa  join (select a.id,count(*) sum1 from t_qa_expert  a join t_qa_answer b on a.user_id=b.user_id where a.state=0 and b.verify='10'  and answer_time between '" + start +"' and '" + end +"' and  b.question_id in (select c.question_id from t_qa_question   c,t_qa_question_category   d where c.category=d.id and (d.parent_id=a.cate_id or d.id=a.cate_id))  group by a.user_id,a.cate_id ) ee on aa.id=ee.id  set answer=ee.sum1";                                db.executeUpdate(sql);                                                                sql=" update t_qa_expert aa  join (select a.id,count(*) sum1 from t_qa_expert  a join t_qa_answer b on a.user_id=b.user_id where  a.state=1  and b.verify='10'  and answer_time between '" + start +"' and '" + end +"' and  b.question_id in (select c.question_id from t_qa_question   c,t_qa_question_category   d where c.category=d.id and (d.parent_id=a.cate_id or d.id=a.cate_id))  group by a.user_id,a.cate_id ) ee on aa.id=ee.id  set answer=ee.sum1";                                db.executeUpdate(sql);                                                                sql=" update t_qa_expert aa  join (select a.id,count(*) sum1 from t_qa_expert  a join t_qa_answer b on a.user_id=b.user_id where a.state=0   and b.is_best='1' and b.verify='10'  and answer_time between '2008-11-01 00:00:00' and '2009-01-31 11:59:59' and  b.question_id in (select c.question_id from t_qa_question   c,t_qa_question_category   d where c.category=d.id and (d.parent_id=a.cate_id or d.id=a.cate_id))  group by a.user_id,a.cate_id ) ee on aa.id=ee.id  set best_answer=ee.sum1";                                sql=" update t_qa_expert aa  join (select a.id,count(*) sum1 from t_qa_expert  a join t_qa_answer b on a.user_id=b.user_id where a.state=0 and b.is_best='1' and b.verify='10'  and answer_time between '" + start +"' and '" + end +"' and  b.question_id in (select c.question_id from t_qa_question   c,t_qa_question_category   d where c.category=d.id and (d.parent_id=a.cate_id or d.id=a.cate_id))  group by a.user_id,a.cate_id ) ee on aa.id=ee.id  set best_answer=ee.sum1";                                db.executeUpdate(sql);                                                                sql=" update t_qa_expert aa  join (select a.id,count(*) sum1 from t_qa_expert  a join t_qa_answer b on a.user_id=b.user_id where a.state=1  and b.is_best='1' and b.verify='10'  and answer_time between '" + start +"' and '" + end +"' and  b.question_id in (select c.question_id from t_qa_question   c,t_qa_question_category   d where c.category=d.id and (d.parent_id=a.cate_id or d.id=a.cate_id))  group by a.user_id,a.cate_id ) ee on aa.id=ee.id  set best_answer=ee.sum1";                                db.executeUpdate(sql);                                                                /*                                 * 五分中内回答数                                 */                                sql=" update t_qa_expert aa  join (select a.id,count(*) sum1 from t_qa_expert  a join t_qa_answer b on a.user_id=b.user_id where a.state=0 and b.isfast='1' and b.verify='10'  and answer_time between '" + start +"' and '" + end +"' and  b.question_id in (select c.question_id from t_qa_question   c,t_qa_question_category   d where c.category=d.id and (d.parent_id=a.cate_id or d.id=a.cate_id))  group by a.user_id,a.cate_id ) ee on aa.id=ee.id  set fast_answer=ee.sum1";                                db.executeUpdate(sql);                                                                sql=" update t_qa_expert aa  join (select a.id,count(*) sum1 from t_qa_expert  a join t_qa_answer b on a.user_id=b.user_id where a.state=1  and b.isfast='1' and b.verify='10'  and answer_time between '" + start +"' and '" + end +"' and  b.question_id in (select c.question_id from t_qa_question   c,t_qa_question_category   d where c.category=d.id and (d.parent_id=a.cate_id or d.id=a.cate_id))  group by a.user_id,a.cate_id ) ee on aa.id=ee.id  set fast_answer=ee.sum1";                                db.executeUpdate(sql);                                /*                                 * 专家团统计更新                                 */                                sql="UPDATE t_qa_expert_group d LEFT JOIN "                                        +" (SELECT pid AS cate_id,CAST(SUM(IF(fastNum IS NULL,0,fastNum))/SUM(IF(allNum IS NULL ,0,allNum))*100 AS DECIMAL(4,2)) AS quick_percent FROM "                                         +" (SELECT category ,COUNT(*) AS allNum FROM t_qa_question WHERE ask_time BETWEEN '" + start +"' and '" + end +"' GROUP BY category) a "                                        +" LEFT JOIN "                                         +" (SELECT category,COUNT(*) AS fastNum FROM t_qa_question WHERE ask_time BETWEEN '" + start +"' and '" + end +"' AND first_answer_time-ask_time                                        +" ON a.category = b.category "                                        +" LEFT JOIN "                                        +" (SELECT id,IF(parent_id IS NULL ,id,parent_id) AS pid FROM t_qa_question_category) c "                                        +" ON a.category =c.id "                                        +" GROUP BY c.pid)e "                                        +" ON d.cate_id=e.cate_id "                                        +" SET  d.up_down= IF((e.quick_percent-d.quick_percent)=0,0,IF((e.quick_percent-d.quick_percent)>0,1,-1)), "                                        +" d.quick_percent = IF(e.quick_percent IS NULL ,0,e.quick_percent)";                                db.executeUpdate(sql);                                db.close();                                 /*                                 if (Const.VideoListDailySorterEnable.equals("true")){                                         TimesMap.setSortList();                                 }                                 if (Const.AlbumSorterEnable.equals("true")){                                         AlbumUtil.initRecommendAlbum();                                 }                                 if (Const.VideoIndexOptimizeAutorun.equals("true")){                                         (new OptIndexServlet()).optimizeIndex();                                 }                                 */                                AutoMature.JudgeMature();                                AutoMature.updateVote();                                isRunning = false;                                logger.info("Task end-->Time:"+sdf.format(new Date()));                        } else {                                logger.info("one Task is running");                        }                }catch(Exception e){                        logger.error("Task error++++++++++++++++++++++"+e);                        e.printStackTrace();                }        }                /**     * 获取上月的开始时间     * @return     */    public static String getStartOfMonth(){            Calendar cal = Calendar.getInstance();            //cal.add(Calendar.MONTH, 0);            cal.set(Calendar.DAY_OF_MONTH, cal.getMinimum(Calendar.DAY_OF_MONTH));                cal.set(Calendar.HOUR_OF_DAY, cal.getMinimum(Calendar.HOUR_OF_DAY));                cal.set(Calendar.MINUTE,      cal.getMinimum(Calendar.MINUTE));                cal.set(Calendar.SECOND,      cal.getMinimum(Calendar.SECOND));                cal.set(Calendar.MILLISECOND, cal.getMinimum(Calendar.MILLISECOND));            return date2str(cal.getTime(), TODAY_STRING_DATE);    }        /**     * 获取上月的结束时间     * @return     */    public static String getEndOfMonth(){            Calendar cal = Calendar.getInstance();            cal.add(Calendar.MONTH, 1);            cal.set(Calendar.DAY_OF_MONTH, 1);                cal.set(Calendar.HOUR_OF_DAY, cal.getMaximum(Calendar.HOUR_OF_DAY));                cal.set(Calendar.MINUTE,      cal.getMaximum(Calendar.MINUTE));                cal.set(Calendar.SECOND,      cal.getMaximum(Calendar.SECOND));                cal.set(Calendar.MILLISECOND, cal.getMaximum(Calendar.MILLISECOND));                cal.add(Calendar.DAY_OF_MONTH, -1);            return date2str(cal.getTime(), TODAY_STRING_DATE);    }    public final static String TODAY_STRING_DATE = "yyyy-MM-dd HH:mm:ss";        public static String date2str(final Date date, final String pattern) {  //date to string            SimpleDateFormat sf = new SimpleDateFormat(pattern);            return sf.format(date);    }        /**     * 判断是否是每月的1号     * @return     */    public static boolean isOneDay(){            Calendar cal = Calendar.getInstance();            return cal.get(Calendar.DAY_OF_MONTH) ==1;    }            public static void main(String argv[]){            System.out.println(MainTask.isOneDay());            Db db=Db.getSelf();            MainTask mt = new MainTask();            mt.backData(db);            /*System.out.println(getEndOfMonth());            System.out.println(getStartOfMonth());                        String start = getStartOfMonth();                String end = getEndOfMonth();                String sql = null;                sql=" update t_qa_expert aa  join (select a.id,count(*) sum1 from t_qa_expert  a join t_qa_answer b on a.user_id=b.user_id where a.state=0   and b.verify='10'  and answer_time between '" + start +"' and '" + end +"' and  b.question_id in (select c.question_id from t_qa_question   c,t_qa_question_category   d where c.category=d.id and (d.parent_id=a.cate_id or d.id=a.cate_id))  group by a.user_id,a.cate_id ) ee on aa.id=ee.id  set answer=ee.sum1";                System.out.println(sql);                sql=" update t_qa_expert aa  join (select a.id,count(*) sum1 from t_qa_expert  a join t_qa_answer b on a.user_id=b.user_id where a.state=0   and b.is_best='1' and b.verify='10'  and answer_time between '" + start +"' and '" + end +"' and  b.question_id in (select c.question_id from t_qa_question   c,t_qa_question_category   d where c.category=d.id and (d.parent_id=a.cate_id or d.id=a.cate_id))  group by a.user_id,a.cate_id ) ee on aa.id=ee.id  set best_answer=ee.sum1";                                System.out.println(sql);*/                    }}
package cn.yicha.timer;
import java.text.SimpleDateFormat;import java.util.Date;import java.util.TimerTask;
import org.apache.log4j.Logger;
import cn.yicha.ask.question.CheckAskBean;import cn.yicha.ask.user.Db;
public class AskBaiduTask extends TimerTask{            public static final Logger logger = Logger.getLogger(AskBaiduTask.class.getName());
    private static boolean isRunning = false;//任务正在执行标志,以避免重复执行
        @Override        public void run() {                // TODO Auto-generated method stub                try{                        if (!isRunning) {                                isRunning = true;                                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");                                logger.info("任义勇Task start-->Time:"+sdf.format(new Date()));                                CheckAskBean chb = new CheckAskBean();                                chb.opration();                                                                isRunning = false;                                logger.info("任义勇Task end-->Time:"+sdf.format(new Date())+isRunning);                        } else {                                logger.info("任义勇one Task is running"+isRunning);                        }                }catch(Exception e){                        logger.error("Task error++++++++++++++++++++++"+e);                        e.printStackTrace();                }                        }
}
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/104127/showart_2079610.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP