zoukankan      html  css  js  c++  java
  • java中服务器启动时,执行定时任务

    package com.ripsoft.util;
    
    import java.util.Calendar;
    import java.util.Timer;
    
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    
    public class TimerListener implements ServletContextListener{
        private Timer timer = null;  
          
        @Override  
        public void contextInitialized(ServletContextEvent event) {  
            timer = new Timer(true);  
            event.getServletContext().log("定时器已启动");  
           
          //设置执行时间
            Calendar calendar = Calendar.getInstance();
            int year = calendar.get(Calendar.YEAR);
            int month = calendar.get(Calendar.MONTH);
            int day = calendar.get(Calendar.DAY_OF_MONTH);//每天
            //定制每天的11:00:00执行
            calendar.set(year, month, day, 11, 00, 00);
            java.util.Date date = calendar.getTime();
            int period = 30 * 1000;
            //每天的date时刻执行TestTask,每隔30秒重复执行
            timer.schedule(new TestTask(), date, period);
            //每天的date时刻执行TestTask, 仅执行一次
            //timer.schedule(new TestTask(), date);
        }  
      
        @Override  
        public void contextDestroyed(ServletContextEvent event) {  
            if (timer != null) {  
                timer.cancel();  
                event.getServletContext().log("定时器销毁");  
            }  
        }  
    }
    package com.ripsoft.util;
    
    import java.util.TimerTask;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    public class TestTask extends TimerTask{
        protected final Log logger = LogFactory.getLog(getClass());  
          
        private static boolean isRunning = false;  
      
        @Override  
        public void run() {  
            if (!isRunning) {  
                isRunning = true;  
                logger.info("开始执行任务。");  
      
                int i = 0;  
                while (i++ < 10) {  
                    logger.info("已完成任务的" + i + "/" + 10);  
                }  
      
                isRunning = false;  
                logger.info("任务执行结束。");  
      
            } else {  
                logger.info("上一次任务执行还未结束,本次任务不能执行。");  
            }  
      
        }  
    }

    1.TestTimerListener.java执行定时任务,实现servlet的ServletContextListener接口,当服务器启动时开始执行TestTask任务

    2.想要任务在服务器启动时定时执行,就要借助监听实现需要在web.xml中做如下配置

        <listener>
            <listener-class>com.ripsoft.util.TimerListener</listener-class>
        </listener>
  • 相关阅读:
    利用Dom4j创建xml文档
    eclipse安装、使用hibernate插件方法
    “万能数据库查询分析器”用户已基本涵盖当前所有DBMS
    在Dom4j中使用Xpath搜索xml的元素节点
    多线程的一些小问题集锦
    Dalvik虚拟机的运行过程分析
    创建线程的两种方式
    通过xpath查找指定的节点
    Oracle TNS 配置
    c++五种内存分配、堆与栈区别
  • 原文地址:https://www.cnblogs.com/qiuting/p/6076907.html
Copyright © 2011-2022 走看看