Java定时执行任务的实现方法
定时执行任务的三种方法:
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:
<listener>
<listener-class>com.sysnet.demo.util.MyTimerTask</listener-class>
</listener>
3)org.springframework.scheduling.timer.ScheduledTimerTask
如果你用spring,那么你不需要写Timer类了,在schedulingContext-timer
.xml中加入下面的内容就可以了:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="timer" class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<ref local="MyTimeTask1"/>
</list>
</property>
</bean>
<bean id="MyTimeTask" class="com.qq.timer.ListByDayTimerTask"/>
<bean id="MyTimeTask1" class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="timerTask">
<ref bean="MyTimeTask"/>
</property>
<property name="delay">
<value>10000</value>
</property>
<property name="period">
<value>86400000</value>
</property>
</bean>
</beans>
下面给出方法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里加入一下代码:
<listener>
<listener-class>com.sysnet.demo.util.MyTimerTask</listener-class>
</listener>
相关推荐
### Java定时任务实现:每天定时执行任务 #### 一、概述 在Java开发中,定时任务是非常常见的一种需求。例如,需要定期清理数据库中的过期数据、定时发送邮件通知等场景。本文将详细介绍如何利用Java内置的`Timer`...
JDK自带的Timer API算是最古老的定时任务实现方式了。Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以安排任务“执行一次”或者定期“执行多次”。 使用开源的框架来实现,比如Quartz。 ...
在Java中实现定时任务有多种方式,...总之,Java中实现定时任务的三种主要方式各有特点,从简单的Timer到功能强大的Quartz再到易用的Spring Task,开发者可以根据自己的具体需求和场景,选择合适的定时任务实现方式。
1. **Java自带的`java.util.Timer`类**:这种实现方式允许用户调度一个`java.util.TimerTask`任务,并使程序能够按某一频度执行。然而,这种方式不支持在指定时间点执行任务的功能,因此在实际应用中并不常用,本文...
在实现Java定时任务时,我们需要考虑以下几个关键点: - **任务调度策略**:根据业务需求选择合适的调度策略,如固定延迟、固定间隔或指定时间点执行。 - **任务并发控制**:确保多个任务执行时的互斥和资源管理,...
### 几种任务调度的Java实现方法与比较 在现代软件开发中,任务调度是确保程序按照预定时间或周期执行特定任务的关键技术之一。本文将详细介绍三种常用的Java任务调度实现方式:`Timer`, `ScheduledExecutorService...
这个类是Java早期版本中对定时任务管理的一个重要实现,尽管在Java 5之后,`java.util.concurrent`包中的`ScheduledExecutorService`被推荐使用,但`Timer`仍然在很多场景下被广泛采用。 `Timer`类主要有两个核心...
本文将深入探讨Spring框架下实现定时任务的几种主流方法,包括使用`java.util.Timer`(即Java定时器)、Spring定时器以及Quartz定时器,旨在帮助开发者根据具体业务场景选择最合适的技术方案。 ### 1. Java定时器...
总结来说,Java提供了多种方式来实现定时任务的退出,包括TimerTask的cancel()方法、Timer的cancel()方法以及ScheduledFuture的cancel()方法。选择哪种方式取决于具体的需求,如任务类型、是否需要立即停止正在执行...
本文旨在深入探讨几种常见的任务调度在Java中的实现方式,包括`Timer`、`ScheduledExecutor`、开源工具包`Quartz`以及`JCronTab`,并对其特性进行对比分析,以帮助开发者根据具体需求选择最适合的方案。 #### Timer...
Java定时检测系统是一种基于Java编程语言实现的自动化解决方案,它能够按照预设的时间间隔执行特定的任务,例如数据更新、文件修改、系统监控等。在Java中实现这样的功能,主要依赖于以下几个关键知识点: 1. **...
本篇文章将深入探讨Java中的三种主要时间调度实现:`Timer`、`TimerTask`、以及第三方库`Quartz`和`Spring`的定时任务功能。 ### 1. Java `Timer` 和 `TimerTask` `java.util.Timer` 类提供了一个调度任务的方法,...
在提供的压缩包文件中,"RbootTool.zip"可能是服务重启工具的主程序,它可能包含了实现定时任务的核心逻辑,如使用上述的Java定时机制,并且具备服务监控和重启的接口。而"TimerJob.rar"可能包含了具体的定时任务...
在本文中,我们将深入探讨Java编程基础、定时任务的实现方式以及如何创建一个能够控制计算机开关机的程序。 首先,让我们了解Java语言的基础。Java是一种面向对象的编程语言,由Sun Microsystems(现为Oracle ...
在Spring框架中,有三种主要的定时任务机制可供开发者选择,分别是基于Quartz的定时机制、Spring自己的`@Scheduled`注解以及Java的`java.util.Timer`类。在这篇文章中,我们将重点讨论基于Quartz的定时机制,因为它...
在Java中,定时任务的实现有多种方式,本文主要讨论了三种常见的方法:Timer和TimerTask、ScheduledExecutorService以及第三方库Quartz。这些方法各有特点,适用于不同的场景需求。 首先,我们来看Timer和TimerTask...
在Java编程中,定时任务是常见的一种需求,例如定时发送邮件。这通常涉及到Java的定时器(Timer)类和相关的API。在这个场景中,我们将会深入探讨如何利用Java的定时器来实现定时发送邮件的功能。 首先,Java的...
2. **Timer和TimerTask**:这是一个更通用的Java定时器框架,适用于需要在后台线程执行定时任务的情况。Timer创建了一个计划任务的调度表,而TimerTask是实际的任务类,继承自它并重写`run()`方法。通过`timer....
`Timer`类提供了一种方法,可以在指定的延迟后或定期执行任务,这对于需要在应用程序中设置计时器或者定时触发某些操作的场景非常有用。在本篇文章中,我们将深入探讨`Timer`类的工作原理、使用方式以及注意事项。 ...
Java标准库提供了几种不同的方式来实现定时任务的功能,其中最常用的是`java.util.Timer`类与`java.util.TimerTask`类的组合使用。 #### 二、核心概念 1. **Timer类**:它是Java中的定时器类,用于安排和管理定时...