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