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

TimerTask实现定期检查数据库操作的更多相关文章

  1. 如何在高并发环境下设计出无锁的数据库操作(Java版本)

    一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...

  2. 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~

    最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...

  3. MySQL 系列(二) 你不知道的数据库操作

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 本章内容: 查看\创建\使用\删除 数据库 用户管理及授权实战 局域网 ...

  4. ABP创建数据库操作步骤

    1 ABP创建数据库操作步骤 1.1 SimpleTaskSystem.Web项目中的Web.config文件修改数据库配置. <add name="Default" pro ...

  5. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. django数据库操作和中间件

    数据库配置 django的数据库相关表配置在models.py文件中,数据库的连接相关信息配置在settings.py中 models.py相关相关参数配置 from django.db import ...

  7. [Android Pro] 完美Android Cursor使用例子(Android数据库操作)

    reference to : http://www.ablanxue.com/prone_10575_1.html 完美 Android Cursor使用例子(Android数据库操作),Androi ...

  8. phpcms v9 中的数据库操作函数

    1.查询 $this->select($where = '', $data = '*', $limit = '', $order = '', $group = '', $key='')   返回 ...

  9. Android打造属于自己的数据库操作类。

    1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要 ...

随机推荐

  1. iOS 之 Quartz2D

    1. Quartz2D 之 简单介绍 2. Quartz2D 之 简单使用 3. Quartz2D 之 绘制文本

  2. 如何使用PDO查询Mysql来避免SQL注入风险?ThinkPHP 3.1中的SQL注入漏洞分析!

    当我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严,就有SQL注入风险,导致网站被攻击,失去控制.虽然可以用mysql_real_escape_ ...

  3. C++第五天学习

    回顾: 1.友元 friend 2.运算符重载 类型 operator运算符(参数表) 抽象.封装 类是面向对象程序设计中最基本的概念 类的背后隐藏的思想是数据抽象和封装 是进行封装和数据隐藏的工具, ...

  4. VMware虚拟机与宿主无法复制的解决办法

    由于工作需要,上网机器使用虚拟机,因此需要经常来回的拷贝文件,而vmware从6.5一直走来到10.0.1,总是有一个问题很让人苦恼---共享粘贴板总是会无故失效.经常实验,发现可以经过以下方法临时解 ...

  5. Camera.ScreenPointToRay 解析

    Unity官方文档: Camera.ScreenPointToRay public function ScreenPointToRay(position: Vector3): Ray; Descrip ...

  6. Collections.sort的两种用法

    http://gwh-08.iteye.com/blog/1233401/ class Foo implements Comparable<Foo>{ @Override public i ...

  7. 各个浏览器开启CSS Grid Layout的方式

    2017年3月,Chrome.Firefox将开启默认支持. 当然对于很多人等不及浏览器默认支持,想提前体验一把,这里提供一些打开方式: 1.Chrome 在浏览器中输入:chrome://flags ...

  8. 关于flash擦除的方法

    一般的Flash,只允许写时将1变成0,而不允许0变成1:仅当擦除时将0变成1.所以写全0xff是没什么意义的 以前对flash只能进行一次写很困惑,这句话解释了原因. norflash就是 对bit ...

  9. gulp实时编译less,压缩合并requirejs模块文件

    gulp的使用命令简单,就几个,gulp的简单使用教材可以参考一点的gulp使用教材(http://www.ydcss.com/archives/18). 下面就简单的介绍这些命令如何互相配合的完成前 ...

  10. SOCKET是什么

    一.问题的引入--socket的引入是为了解决不同计算机间进程间通信的问题 1.socket与进程的关系 1).socket与进程间的关系:socket   用来让一个进程和其他的进程互通信息(IPC ...