`

java定时任务

阅读更多

java的源码为我们提供了一些基础的实现:如Timer类和TimerTask类。

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启动后就可以   
自动运行该任务,不需要手工操作。   
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>   

 

下面这个例子是自己结合网上的例子实现的,也就是用第二种方法。怎样利用mvn创建一个web工程,见我的上一篇文章。

 

1.定时器类

 

package com.amuse.timer;

import java.util.Timer;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
 * 类TimerContextListener.java的实现描述:TimerContextListener.java
 * <p>
 * 实现了ServletContextListener,这样就不用手工启动定时器了,容器启动的时候,定时器就启动了
 * 
 * @author yongchun.chengyc 2012-3-14 下午1:27:00
 */
public class TimerContextListener implements ServletContextListener {

    /** 定义一个定时器类 */
    private Timer timer = null;

    /*
     * (non-Javadoc)
     * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
     */
    @Override
    public void contextDestroyed(ServletContextEvent event) {
        timer.cancel();
        event.getServletContext().log("定时器取消");

    }

    /*
     * (non-Javadoc)
     * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
     */
    @Override
    public void contextInitialized(ServletContextEvent event) {
        event.getServletContext().log("已启动定时器");
        timer = new Timer(true);
        MyTask task = new MyTask(event.getServletContext());
        // 每十秒执行一下任务
        timer.schedule(task, 0, 10 * 1000);
        event.getServletContext().log("已添加任务调度表");

    }

}

 

 

2.任务类

 

package com.amuse.timer;

import java.util.TimerTask;

import javax.servlet.ServletContext;

/**
 * 类MyTask.java的实现描述:MyTask.java
 * <p>
 * 继承TimerTask,实现它的run方法
 * 
 * @author yongchun.chengyc 2012-3-14 下午1:36:29
 */
public class MyTask extends TimerTask {

    /** 定义一个ServltContext */
    private ServletContext context = null;

    public MyTask(ServletContext context){
        this.context = context;
    }

    /*
     * (non-Javadoc)
     * @see java.util.TimerTask#run()
     */
    @Override
    public void run() {

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

        int i = 0;
        while (i++ < 10) {
            System.out.println("已完成任务的" + i + "/" + 10);
            try {
                // 为了看得明白点,这里没完成一次输出睡眠5秒
                new Thread().sleep(5 * 1000);
            } catch (InterruptedException e) {
                context.log(e.getMessage());
            }
        }
        context.log("任务执行结束");
    }

}

 

 

3.在web.xml文件里配置

 

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <listener>
  <listener-class>com.amuse.timer.TimerContextListener</listener-class>
  </listener>
</web-app>

 

 

4.运行mvn jetty:run

 

 

5.输出结果为:

 

2012-03-14 14:53:12.685:/timer:INFO:  已启动定时器
2012-03-14 14:53:12.685:/timer:INFO:  已添加任务调度表
2012-03-14 14:53:12.685:/timer:INFO:  开始执行任务
已完成任务的1/10
2012-03-14 14:53:12.722::INFO:  Started SelectChannelConnector@0.0.0.0:8080
[INFO] Started Jetty Server
[INFO] Starting scanner at interval of 10 seconds.
已完成任务的2/10
已完成任务的3/10
已完成任务的4/10
已完成任务的5/10
已完成任务的6/10
已完成任务的7/10
已完成任务的8/10
已完成任务的9/10
已完成任务的10/10
2012-03-14 14:54:02.536:/timer:INFO:  任务执行结束
2012-03-14 14:54:02.537:/timer:INFO:  开始执行任务
已完成任务的1/10
已完成任务的2/10
已完成任务的3/10
已完成任务的4/10
已完成任务的5/10
已完成任务的6/10
已完成任务的7/10
已完成任务的8/10
已完成任务的9/10
已完成任务的10/10
2012-03-14 14:54:52.290:/timer:INFO:  任务执行结束
2012-03-14 14:54:52.291:/timer:INFO:  开始执行任务
已完成任务的1/10
已完成任务的2/10
已完成任务的3/10
已完成任务的4/10
已完成任务的5/10
已完成任务的6/10
已完成任务的7/10
已完成任务的8/10
已完成任务的9/10
已完成任务的10/10
2012-03-14 14:55:42.140:/timer:INFO:  任务执行结束
2012-03-14 14:55:42.141:/timer:INFO:  开始执行任务
已完成任务的1/10
已完成任务的2/10
已完成任务的3/10
已完成任务的4/10
已完成任务的5/10
已完成任务的6/10
已完成任务的7/10
已完成任务的8/10
已完成任务的9/10
已完成任务的10/10
2012-03-14 14:56:32.990:/timer:INFO:  任务执行结束
2012-03-14 14:56:32.991:/timer:INFO:  开始执行任务
已完成任务的1/10
已完成任务的2/10
已完成任务的3/10
已完成任务的4/10
已完成任务的5/10
已完成任务的6/10
已完成任务的7/10
已完成任务的8/10
已完成任务的9/10
已完成任务的10/10
2012-03-14 14:57:22.840:/timer:INFO:  任务执行结束
2012-03-14 14:57:22.841:/timer:INFO:  开始执行任务
已完成任务的1/10
已完成任务的2/10
已完成任务的3/10
已完成任务的4/10
已完成任务的5/10
已完成任务的6/10
已完成任务的7/10
已完成任务的8/10
已完成任务的9/10
已完成任务的10/10
2012-03-14 14:58:12.690:/timer:INFO:  任务执行结束
2012-03-14 14:58:12.691:/timer:INFO:  开始执行任务
已完成任务的1/10
已完成任务的2/10
已完成任务的3/10
已完成任务的4/10
已完成任务的5/10
已完成任务的6/10
已完成任务的7/10
已完成任务的8/10
已完成任务的9/10
已完成任务的10/10

 

Timer--->schedule() ---->Task---run().任务就是像这样的

分享到:
评论

相关推荐

    java定时任务,每天定时执行任务

    Java 定时任务,每天定时执行任务 Java 定时任务是指在 Java 语言中实现的定时执行任务的机制,通过使用 Timer 和 TimerTask 两个类,可以实现定时执行任务的功能。在这个例子中,我们将实现每天定时执行任务的功能...

    java定时任务的实现方式

    Java定时任务的实现是软件开发中常见的需求,用于在特定时间执行特定的业务逻辑,例如数据备份、报表生成等。本文将详细介绍两种常用的Java定时任务实现方式:Timer类和Spring框架的Quartz调度器。 首先,第一种...

    Quartz--JAVA定时任务\Java应用:Java调度任务和Spring Quartz (1)

    Java定时任务是应用程序中不可或缺的一部分,它允许程序在特定时间执行特定操作,无需用户干预。在JDK 1.3及以后的版本中,`java.util.Timer`类提供了基础的定时任务支持。不过,`Timer`类的功能相对有限,无法精确...

    java定时任务调度

    Java定时任务调度是Java开发中常见的一种功能,用于在特定时间执行特定的任务,例如数据同步、日志清理、报表生成等。在Java中,有多种实现定时任务调度的方式,包括但不限于Java内置的`java.util.Timer`类、Spring...

    java定时任务小例子

    Java定时任务是编程中常见的一种需求,用于在特定时间或间隔执行特定的代码逻辑。在这个“java定时任务小例子”中,我们可以看到两个关键文件:`TimerTest.java`和`DoTask.java`,它们分别代表了定时器的任务调度和...

    java定时任务开源案例

    Java定时任务是软件开发中一个不可或缺的特性,它允许程序在特定时间执行预定的任务,而无需用户干预。在Java世界里,实现定时任务的方式多种多样,包括但不限于使用Java内置的`java.util.Timer`和`java.util....

    java 定时任务管理框架

    Java定时任务管理框架是开发中常见的一种工具,用于在特定时间执行特定任务,极大地提高了工作效率。Citic Scheduler作为这样一个框架,旨在简化Java项目中的定时任务管理。它提供了一个直观的用户界面,允许开发者...

    java 定时任务

    Java定时任务是软件开发中的一个重要组成部分,特别是在服务端应用程序中,常常需要在特定时间执行某些操作,例如数据备份、清理过期数据、发送通知等。SpringBoot框架为开发者提供了便捷的方式来实现这些定时任务,...

    java 定时任务及jar包

    Java定时任务是Java编程中一个重要的特性,它允许开发者安排任务在特定的时间点或周期性地执行。在Java中,我们可以使用内置的`java.util.Timer`类和`java.util.concurrent.ScheduledExecutorService`来实现定时任务...

    java定时任务quartz的基本实现

    Java定时任务在软件开发中扮演着重要角色,它允许开发者安排任务在特定时间执行,而无需持续监控。Quartz是Java领域中一个广泛使用的开源任务调度框架,它提供了丰富的功能来满足各种定时任务的需求。本篇文章将深入...

    JAVA定时任务调度

    Java定时任务调度是Java开发中一个非常重要的技术领域,它允许开发者在特定的时间点或按照预定义的周期执行任务,从而实现自动化的工作流程。在Java中,我们可以使用多种方式来实现定时任务,如Java内置的`java.util...

    java定时任务器(含源码)

    用java写的任务定时器,设置想设的时间,选择可执行文件或者txt,word,时间一到便会自动运行。现在有源码。

    Java定时任务及其在工作流系统中的应用.pdf

    Java定时任务及其在工作流系统中的应用 Java定时任务是指在Java平台上执行定时任务的机制,以满足工作流系统中的需求。在工作流系统中,定时任务可以用于发送工作到期提醒邮件、自动执行任务、监控系统状态等。 ...

    java定时任务调度之Timer 简单示例

    Java定时任务调度是Java应用程序中常见的一种功能,用于在特定时间执行特定任务,例如定期备份、数据清理等。`Timer`类是Java中用于实现定时任务调度的一个基础工具,它位于`java.util`包中。在本文中,我们将深入...

    java 定时任务写法

    ### Java定时任务实现方法:Quartz API 的应用与实践 #### 一、Quartz API简介 Quartz 是一个开源项目,提供了丰富的调度功能,适用于各种Java应用中的定时任务需求。它由Michael Lipton(mwlipton@us.ibm.com)等...

Global site tag (gtag.js) - Google Analytics