定时任务实现方法总结与分析

本文介绍了J2EE项目中常用的三种定时任务实现方法:java.util.Timer类、Spring3.0后的Spring-task以及定时任务框架Quartz。详细阐述了各方法的使用、优缺点,并提供了代码示例和扩展内容,包括如何向定时任务传递参数和动态修改调度时间周期。
摘要由CSDN通过智能技术生成

上次熟悉了MarkDown的用法之后,由于各种原因一直没有时间更新博客。。。这次打算把我之前总结的一些东西陆陆续续的写在博客里,希望下次用到的时候能够快速记起来~

—————————————华丽的分割线——————————————–

1 定时任务简介

在应用开发中,经常需要一些周期性的操作,如:需要在每天凌晨时候分析一次前一天的日志信息、需要每隔5分钟检查一下某个模块是否有异常然后自动发送邮件给管理员,在项目运行到第30天的时候需要执行某些操作等等。这些功能需求就需要我们使用一些定时任务方法去实现,本文将介绍目前J2EE项目常用的几种定时任务方法并比较它们的优缺点。

2 J2EE项目中常用到的三种定时任务实现方法

2.1 java.util.Timer类

2.1.1 简介

先来介绍下Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。TimerTask类用于实现由Timer安排的一次或重复执行的某个任务。每一个Timer对象对应的是一个线程,因此计时器所执行的任务应该迅速完成,否则会延迟后续的任务执行。

java.util.Timer类方法摘要

void cancel()
终止此计时器,丢弃所有当前已安排的任务。
int purge()
从此计时器的任务队列中移除所有已取消的任务。
void schedule(TimerTask task, Date time)
安排在指定的时间执行指定的任务。
void schedule(TimerTask task, Date firstTime, long period)
安排指定的任务在指定的时间开始进行重复的固定延迟执行。
void schedule(TimerTask task, long delay)
安排在指定延迟后执行指定的任务。
void schedule(TimerTask task, long delay, long period)
安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。
void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
安排指定的任务在指定的时间开始进行重复的固定速率执行。
void scheduleAtFixedRate(TimerTask task, long delay, long period)
安排指定的任务在指定的延迟后开始进行重复的固定速率执行。

TimerTask类方法摘要

boolean cancel()
取消此计时器任务。
abstract void run()
此计时器任务要执行的操作。
long scheduledExecutionTime()
返回此任务最近实际执行的安排执行时间。

2.1.2 使用方法

使用Timer类的schedule(TimerTask task, long delay, long period)方法启动定时器。

    Timer  timer=new Timer();  
    MyTask myTask=new MyTask();  
    timer.schedule(myTask, 1000, 2000); 

TimerTask类主要实现run()方法里的业务逻辑,用法如下:

import java.text.SimpleDateFormat;  
import java.util.Date;  
import java.util.TimerTask;  

public class MyTask extends TimerTask {
     

    @Override  
    public void run() {  
        // TODO Auto-generated method stub  
        SimpleDateFormat simpleDateFormat=null;  
        simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");  
        System.out.println("当前的系统时间为:"+simpleDateFormat.format(new Date()));  

    }  
}

2.1.3 扩展内容(往定时任务方法中传参数)

import java.text.SimpleDateFormat;  
import java.util.Date;  
import java.util.TimerTask;  

public class WaitListTimerTask extends TimerTask {
     
private WaitList waitList;
public WaitListTimerTask(WaitList waitList){
        this.waitList=waitList;
}

    @Override  
    public void run() {  
        // 参数waitList使用示例  
        List<CourseWaitList> allCourseWaitList = this.waitList.getAllCourseWaitList();

    }  
}

2.2 Spring3.0以后自带的Spring-task

2.2.1 简介

Spring3.0以后自主开发了定时任务工具spring task,可以将它比作一个轻量级的Quartz,而且使用起来很简单,除spring相关的包外不需要额外的包,而且支持注解和配置文件两种形式,下面将分别介绍这两种方式。

2.2.2 使用方法

第一种:配置文件方式
①编写作业类
即普通的pojo,如下:

import org.springframework.stereotype.Service;  

@Service  
public class TaskJob {
     
    public void job1() {  

        System.out.println(“任务进行中。。。”);  

    }  
}

②在spring配置文件头中添加命名空间及描述

<beans xmlns="http://www.springframework.org/schema/beans"  

    xmlns:task="http://www.springframework.org/schema/task"   

    …… 

    xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">

③Spring配置文件中设置具体的任务

<task:scheduled-tasks>   

        <task:scheduled ref="taskJob" method="job1" cron="0 * * * * ?"/>   

</task:scheduled-tasks>  
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值