• TimerTask实现定期检查数据库操作


                   

        最近在做一个P2P 的众筹网站,其他的内容还都可以,只是定期检查数库里面的项目是不是到期了,让我费了一些时间,现在写好了,我把它总结下来,以便以后使用。顺便和大家分享一下。

    Timer可以看成一个定时器,安排以后可以在后台线程中执行任务,可以设置任务执行的周期,每隔一段时间执行一次。

    我的这个项目使用的是Spring+SpringMVC+MyBatis框架,采用注解的方式管理Bean,运行环境是MyEclipse8.6,Orcal数据库

       第一步:首先需要修改Spring的Web.xml文件中的Listener配置

    <!-- spring配置 -->
    <!--   
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener> 
     -->
    <!-- spring配置(修改后) -->
    
        <listener>
    <listener-class>com.aaa.listener.ProjectListener</listener-class>
        </listener>
    

     第二步:定义一个任务类并继承DataTask (import java.util.TimerTask;)重写Run方法。run方法里面调用的是注入的实现类的方法,这个实现类和平时写的一样,在这里我就不多说了

    package com.zzzy.qingju.interceptor;
    
    import java.util.TimerTask;
    
    import javax.annotation.Resource;
    
    import org.springframework.stereotype.Repository;
    
    import com.zzzy.qingju.dao.XiangMuDao;
    
    @Repository   
    public class DataTask extends TimerTask {
    
    
           //注入项目Dao的实现类
        private XiangMuDao xmdaoimp;
        @Resource(name = "xiangMuDao")
        public void setXmdaoimp(XiangMuDao xmdaoimp) {
            this.xmdaoimp = xmdaoimp;
        }
    
        @Override  //重写run方法
        public void run() {
            // TODO Auto-generated method stub
            try {
                xmdaoimp.updateZt_task();//调用方法
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    }
    

    第三步:定义一个DataListener类继承ContextLoaderListener(必须要继承的)再实现一个ServletContextListener(也是必须的)

    package com.zzzy.qingju.interceptor;
    
    import java.util.Timer;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    
    import org.springframework.web.context.ContextLoaderListener;
    import org.springframework.web.context.WebApplicationContext;
    import org.springframework.web.context.support.WebApplicationContextUtils;
    
    public class DataListener extends ContextLoaderListener implements
            ServletContextListener {
        
        public void contextDestroyed(ServletContextEvent event) {
            // TODO Auto-generated method stub
            super.contextDestroyed(event);
        }
        
        public void contextInitialized(ServletContextEvent event) {
            // TODO Auto-generated method stub
            super.contextInitialized(event);
            ServletContext servletContext = event.getServletContext();
            WebApplicationContext wp = WebApplicationContextUtils
                    .getRequiredWebApplicationContext(servletContext);
                    //获取上面定义的dataTask的bean
            DataTask dataTask = (DataTask) wp.getBean("dataTask");
            Timer timer = new Timer();//新建一个Timer
            // Tomcat服务器启动一分钟后启动Timer,每次间隔一小时再启动一次
       timer.schedule(dataTask, 1000 * 60,  60*60 * 1000);
        //调用Timer的schedule的方法执行操作,以后每小时执行一次
    
        }
    
    }
    

    以上就完成了一个Timer可以在后台定期执行一个方法。这些是查找资料做出来的,以后还要好好的深入研究一下。

  • 相关阅读:
    [SNOI2019]数论
    2018-8-10-C#-写系统日志
    2018-8-10-C#-写系统日志
    2019-3-1-C#-double-好用的扩展
    2019-3-1-C#-double-好用的扩展
    2019-8-31-dotnet-Framework-源代码-·-Ink
    2019-8-31-dotnet-Framework-源代码-·-Ink
    2019-8-31-How-to-fix-nuget-Unrecognized-license-type-MIT-when-pack
    2019-8-31-How-to-fix-nuget-Unrecognized-license-type-MIT-when-pack
    2018-9-30-C#-传入-params-object-长度
  • 原文地址:https://www.cnblogs.com/murong/p/5123226.html
Copyright © 2020-2023  润新知