java 定时执行方法_Java定时执行任务 方法总结

JAVA技巧(Java定时执行任务的实现方法)2009年02月07日 星期六 10:36定时执行任务的三种方法:

1)java.util.Timer.

2)ServletContextListener.

3)org.springframework.scheduling.timer.ScheduledTimerTask

1)java.util.Timer

这个方法应该是最常用的,不过这个方法需要手工启动你的任务:

Timer timer=new Timer();

timer.schedule(new ListByDayTimerTask(),10000,86400000);

这里的ListByDayTimerTask类必须extends TimerTask里面的run()方法。

2)ServletContextListener

这个方法在web容器环境比较方便,这样,在web server启动后就可以

自动运行该任务,不需要手工操作。

将ListByDayListener implements ServletContextListener接口,在

contextInitialized方法中加入启动Timer的代码,在contextDestroyed

方法中加入cancel该Timer的代码;然后在web.xml中,加入listener:

com.sysnet.demo.util.MyTimerTask

3)org.springframework.scheduling.timer.ScheduledTimerTask

如果你用spring,那么你不需要写Timer类了,在schedulingContext-timer.xml中加入下面的内容就可以了:

10000

86400000

下面给出方法2的一个例子供大家参考:

Java代码:

import java.util.Timer;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

public class MyTimerTask implements ServletContextListener{

private Timer timer = null;

@Override

public void contextDestroyed(ServletContextEvent event) {

// TODO Auto-generated method stub

timer.cancel();

event.getServletContext().log("定时器销毁");

System.out.println("停止备份程序……");

}

@Override

public void contextInitialized(ServletContextEvent event) {

//在这里初始化监听器,在tomcat启动的时候监听器启动,考试,大提示可以在这里实现定时器功能

timer = new Timer(true);

event.getServletContext().log("定时器已启动");//添加日志,可在tomcat日志中查看到

timer.schedule(new exportHistoryBean(event.getServletContext()),0,5*1000);

//调用 exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时;

}

}

import java.util.Calendar;

import java.util.TimerTask;

import javax.servlet.ServletContext;

public class exportHistoryBean extends TimerTask

{

private static final int C_SCHEDULE_HOUR = 0;

private static boolean isRunning = false;

private ServletContext context = null;

public exportHistoryBean(ServletContext context)

{

this.context = context;

}

@Override

public void run()

{

Calendar c = Calendar.getInstance();

if(!isRunning)

{

if(C_SCHEDULE_HOUR == c.get(Calendar.HOUR_OF_DAY))

{

isRunning = true;

context.log("开始执行指定任务");

isRunning = false;

context.log("指定任务执行结束");

}

else

{

context.log("上一次任务执行还未结束");

}

}

}

}

web.xml里加入一下代码:

com.sysnet.demo.util.MyTimerTask

对于我们项目中,可以使用Spring,所以可以使用第二种方式进行使用,而需要对Timer的支持组件进行配置。

Spring对Timer的支持的核心是由ScheduledTimerTask和TimerFactoryBean类组成的。 ScheduledTimerTask类是对TimerTask的包装器实现,这样你就可以为这个任务定义触发器信息。使用 TimerFactoryBean类,你可以让Spring使用配置创建触发器,并为一组指定的ScheduledTimerTask bean自动创建Timer实例。

1、自定义timerTask,比如:定时输出ServletContext中的信息,本例中输出项目的绝对路径(比如:D:\software\apache-tomcat-6.0.33\webapps\spring\)

public class BirthdayReminderTimerTask extends TimerTask implementsServletContextAware{/*通过实现ServletContextAware可获得servletContext*/

privateServletContext servletContext;private static Logger logger = Logger.getLogger(BirthdayReminderTimerTask.class);

@Overridepublic voidrun() {//logger.debug("BirthdayReminderTimerTask is running");

setServletContext(servletContext);try{

System.out.println(this.servletContext.getRealPath("/"));

}catch(Exception e) {

e.printStackTrace();

}

}public voidsetServletContext(ServletContext servletContext) {this.servletContext =servletContext;

}

}

2、在spring的bean配置文件中配置,当系统加载该文件时,配置的定时器将自动启动,同时被spring管理。

3000

5000

3、对于web项目,需要在web.xml中进行如下配置

contextConfigLocation

classpath:beans.xml

org.springframework.web.context.ContextLoaderListener

http://copperfield.iteye.com/blog/1164258

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值