不使用框架,自定义定时任务(web)

本文介绍了如何在不使用框架的情况下,自定义实现Web应用的定时任务。通过创建`TimerTask`类作为任务worker,执行具体的定时任务。同时,利用`ServletContextListener`的`TimerListener`类来设定任务执行的时间,当服务器启动时触发任务初始化,根据预设时间安排任务执行。在`web.xml`中配置监听器完成最后的设置。
摘要由CSDN通过智能技术生成
首先需要一个任务类,这个类主要负责执行定时的任务。它是真正的worker。

import javax.servlet.ServletContext;
public class TimerTask extends java.util.TimerTask {
//application 对象,不是一定需要,但是可能实现某些功能时需要,所以最好作为参数传到当前对象中
 private ServletContext ctx;

 public TimerTask(ServletContext ctx) {
  this.ctx = ctx;
 }

 @Override
 public void run() {
  //需要执行的任务放在这里执行。
  System.out.println("-----------任务执行:"+ctx.getServerInfo());
 }
}

-----------------------------------------------华丽的分割线--------------------------------------------------------------------------------
然后需要一个时间调度,这个类定义任务执行的时间,这个类通过 ServletContext listener实现。
public class TimerListener implements   ServletContextListener {
//时间调度
 private Timer timer;
//任务类
 private TimerTask task;
//格式化时间
 private SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 //服务器停止时调用此方法
 @Override
 public void contextDestroyed(ServletContextEvent event) {
  //停止时间调度
  if(timer != null){
   timer.cancel();
  }
 }
//服务器启动调用此方法
 @Override
 public void contextInitialized(ServletContextEvent event) {
  try {
  //true 设置为后台线程
  timer=new Timer(true);
  //实例化任务类
  task=new TimerTask(event.getServletContext());
  //开始任务的时间,这里的时间可以做成 可配置的,具体实现省略。
  Date settime=sdf.parse("2014-01-09 10:01:00");
  //距离开始还有多少毫秒,因为timer.schedule 不支持直接给定开始时间,而是一个long值
  long starttime=settime.getTime()-new Date().getTime();
  //这个任务会在2014-01-09 10:01:00 被执行,但只会执行一次
  //如果需要循环执行,则 设置第三个参数,也是一个long值,例如:1000,表示在开始时间执行一次后,1000毫钟执行一次。
  timer.schedule(task, starttime);
  } catch (ParseException e) {
   e.printStackTrace();
  }
 }
}
---------------------------------------------------华丽的分割线----------------------------------------------------------------------------
最后在web.xml添加监听信息
<listener>
   <listener-class>com.zjz.timer.TimerListener</listener-class>
</listener>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值