• 如何在服务器上面执行定时程序,在指定的时候执行指定的代码


    首先是ServletContextListener这个类

    如果实现这个接口,然后加上xml的配置

    <listener>
            <listener-class>com.xxx.xxx.MyTimerTask</listener-class>
          </listener>

    当web项目发布至tomcat启动之后会自动加载这个类,然后重写里面的contextInitialized和contextDestroyed方法就能在web容器初始化和销毁的时候干你想干的事情了。这里我们把它用作,开始计时器和结束计时器用。

    下面直接上计时器的代码

    /**
     * 计时器任务类
     * @author XX
     *
     */
    public class MyTimerTask implements ServletContextListener{
    
        //定义一个计时器
        private Timer timer = null;
        
        /**
         * 销毁方法
         */
        @Override
        public void contextDestroyed(ServletContextEvent event) {
            timer.cancel();
            System.out.println("定时器销毁");
            event.getServletContext().log("定时器销毁"); 
        }
    
        /**
         * 创建方法
         */
        @Override
        public void contextInitialized(ServletContextEvent event) {
            
            //在这里初始化监听器,在tomcat启动的时候监听器启动,可以在这里实现定时器功能 
            timer = new Timer(true); 
            System.out.println("定时器已启动");
            event.getServletContext().log("定时器已启动");//添加日志,可在tomcat日志中查看到 
            
            //调用exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时;
            //timer.schedule(task,0,10*1000);
    
            Task task = new Task();
             
            //表示一天的毫秒数 
            long daySpan = 24 * 60 * 60 * 1000;
            final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd '16:49:00'");
    
            Date startTime = new Date();
            try {
                startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(sdf.format(new Date()));
            } catch (ParseException e) {
                e.printStackTrace();
            }
            
            //如果当前已经超过了设置的时间,那么到第二天的这个时间开始
            if(System.currentTimeMillis() > startTime.getTime())
                startTime = new Date(startTime.getTime() + daySpan);
            
            //设置定时器,从startTime开始,每5秒执行一次task
            timer.scheduleAtFixedRate(task, startTime, 5*1000);
            
        }
    
        //定时器执行的任务
        class Task extends TimerTask{
    
            @Override
            public void run() {
                System.out.println("定时程序!");
                
            }
        }
        
    }
  • 相关阅读:
    HDU-3081 Marriage Match II (最大流,二分答案,并查集)
    HDU-3605 Escape(最大流,状态压缩)
    HDU-3338 Kakuro Extension(最大流,方格横纵和问题)
    HDU-2732 Leapin' Lizards
    UVA-10480 Sabotage(最小割,割边方案)
    ajaxfileupload.js无刷新异步上传图片截取头像Demo
    未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...与visualsvn initialization failed
    Python-数据库连表查询、子查询
    Python学习之数据库
    Python学习之表的数据类型
  • 原文地址:https://www.cnblogs.com/linkstar/p/5443904.html
Copyright © 2020-2023  润新知