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可以在后台定期执行一个方法。这些是查找资料做出来的,以后还要好好的深入研究一下。

 

posted @ 2015-05-04 16:48  慕容哲别-  阅读(768)  评论(0编辑  收藏  举报