1.写一个类实现ServletContextListener接口,作为定时器。
package test.web;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.util.*;
public class MyListener implements ServletContextListener{
private Timer timer = null;
private static int EX_HOUR = 0;
private static int EX_MINUTE = 0;
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
event.getServletContext().log("定时器销毁");
// System.out.println(”停止创建预制卡程序……”);
}
public void contextInitialized(ServletContextEvent event) {
// 在这里初始化监听器,在tomcat启动的时候监听器启动
timer = new Timer(true);
event.getServletContext().log("定时器已启动");// 添加日志,可在tomcat日志(一般在localhost)中查看到
// timer.schedule(new MyTask(event.getServletContext()), new java.utit. Date());// 调用
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY,00);
cal.set(Calendar.MINUTE, 45);
System.out.println("系统将在指定时间"+cal.getTime()+"执行定时任务,以后每割一天执行一次");
timer.schedule(new MyTask(event.getServletContext()), cal.getTime(),03*60*1000);
//schedule(TimerTask task, Date firstTime, long period)
//安排指定的任务在指定的时间开始进行重复的固定延迟执行。
// 24*60*60*1000表示每隔一天执 // exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时;
}
}
2.写一个类继承TimerTask, 覆写 public void run()方法,使之执行我们自己的代码
package test.web;
import java.util.Calendar;
import java.util.TimerTask;
import javax.servlet.ServletContext;
//import fund.database.*;
public class MyTask extends TimerTask {
private static final int C_SCHEDULE_HOUR = 0;
private static boolean isRunning = false;
private ServletContext context = null;
public MyTask(ServletContext context) {
this.context = context;
}
public void run() {
Calendar c = Calendar.getInstance();
if (!isRunning) {
if (C_SCHEDULE_HOUR == c.get(Calendar.HOUR_OF_DAY))
isRunning = true;
context.log("开始执行指定任务");
// ———————————————————————————-
// 在这里放上我们自己的代码
Tester tester = new Tester();
String str;
tester.print();
// context.log(str);
// ———————————————————————————-
isRunning = false;
context.log("指定任务执行结束");
} else {
context.log("上一次任务执行还未结束");
}
}
}
3.应用类
package hongwei.test.web;
public class Tester {
public void print( ){
System.out.println("the task is executed");
}
}
4.配置
在web.xml中配置
<web-app>
....
<listener>
<listener-class>test.web.MyListener</listener-class>
</listener>
</web-app>
分享到:
相关推荐
1. **线程安全**:由于`Timer`和`TimerTask`不是线程安全的,因此在多线程的Web应用中,如果多个线程共享同一个`Timer`实例,可能会导致任务调度混乱。为避免这种情况,通常每个任务应拥有自己的`Timer`实例。 2. *...
Timer 是一个线程池,用于执行定时任务,而 TimerTask 是一个抽象类,用于定义定时任务的执行逻辑。在这个例子中,我们使用 Timer 和 TimerTask 实现了每天定时执行任务的功能。 知识点 2:Calendar 的使用 在这个...
在Java中,我们可以利用`java.util.Timer`类和`java.util.TimerTask`类来实现简单的定时任务,但这种实现方式存在线程安全问题。在Web应用中,我们可以利用Servlet容器提供的特性来更优雅地处理定时任务,这就是描述...
总的来说,`Timer`和`TimerTask`是Java中实现定时任务的基本工具,它们简单易用,但在多线程环境下需要注意其线程安全性。通过深入理解这些知识点,开发者可以灵活地在项目中实现各种定时需求。不过,对于复杂的定时...
在Java Web开发中,`ServletContextListener`、`Timer`和`TimerTask`是三个非常重要的概念,它们分别涉及Web应用程序的生命周期管理、定时任务的执行和控制。下面将详细讲解这三个概念及其应用。 首先,`...
在本话题中,我们将深入学习如何在Spring2框架下利用`TimerTask`实现定时任务,以及在MyEclipse开发环境中,如何与Tomcat服务器配合使用。 【描述】:基于MyEclipse的集成开发环境,我们可以构建Java Web项目,并...
在例子中,创建了一个`TimerTask`实例,并将其添加到`Timer`中,设定从当前时间开始,每1000毫秒(1秒)执行一次。在Web项目中,可以通过页面上的按钮触发定时任务的启动,通过表单提交到对应的Servlet或Action。 ...
总结起来,`Timer` 和 `TimerTask` 提供了一种简单的方式在Java中实现定时任务,无论是单次执行还是周期性执行,都能方便地进行调度。但需要注意的是,由于 `Timer` 是基于单线程模型的,如果一个 `TimerTask` 执行...
总结来说,Java 中的定时任务可以通过 `java.util.Timer` 类来实现简单的定时任务管理。而对于更复杂的应用场景,尤其是需要与Web应用程序交互的情况,则可以考虑使用更高级的定时任务框架和技术。
Timer 类负责管理定时任务的执行,而 TimerTask 类则是具体的任务实现。通过使用 Timer 的 schedule 方法,可以将 TimerTask 实例安排在指定的时间点执行。 在上面的示例代码中,TimerManager 类负责管理定时任务的...
例如,我们可以创建一个Runnable实例,然后使用Timer来定时执行这个任务: ```java Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { // 这里编写需要定时执行的...
在Java中,通过创建一个`Timer`实例并调度`TimerTask`来实现定时任务。 ```java import java.util.Timer; import java.util.TimerTask; public class MyTimerTask extends TimerTask { @Override public void ...
在这个监听器中,我们创建了一个定时器对象`timer`,并在Web容器启动时初始化定时器,设置具体的任务和执行间隔时间。同时,在Web容器关闭时取消定时器。 ##### 2.2 自定义任务 (CustomTask & MyTask) 为了实现...
本篇文章将详细探讨如何在Web应用中使用`Java Timer`来实现定时任务。 首先,`Java Timer`类位于`java.util`包中,它提供了一个定时调度任务的机制。要使用`Timer`,你需要创建一个`Timer`实例,并通过`schedule()`...
1. ServletContextListener:创建一个实现了ServletContextListener接口的类,重写contextInitialized方法,在Web应用启动时初始化定时任务。 2. Filter:利用Filter,可以在每次请求前或后执行定时任务,但这可能会...
在Web应用环境中,`ServletContextListener`是一个非常实用的定时任务实现方式。它是一个接口,实现了该接口的类可以在Web服务器启动和关闭时自动调用相应的方法。在`contextInitialized`方法中初始化定时任务,而...
在 TimerManager 类中,我们可以使用 Java 的 Timer 和 TimerTask 来实现定时任务。我们可以设置定时任务的执行时间点和执行间隔,并在每次执行时执行特定的任务逻辑。 例如,在 TimerManager 构造器中,我们可以...
- Java中的`java.util.Timer`和`TimerTask`类,用于创建定时任务。 - Quartz库,一个强大且灵活的开源作业调度框架,支持复杂的时间调度。 - Spring框架的`@Scheduled`注解,方便地在Spring Bean中定义定时任务。...