当前位置:首页 > 开发 > 编程语言 > Spring > 正文

Timer与Spring Quartz 定时执行程序

发表于: 2011-01-14   作者:darkranger   来源:转载   浏览:
摘要: 有时候需要定时触发某一项任务。其实在jdk1.3,java sdk就通过java.util.Timer提供相应的功能。一个简单的例子说明如何使用,很简单: 1、第一步,我们需要建立一项任务,我们的任务需要继承java.util.TimerTask package com.test; import java.text.SimpleDateFormat; import java.util.Date;

有时候需要定时触发某一项任务。其实在jdk1.3,java sdk就通过java.util.Timer提供相应的功能。一个简单的例子说明如何使用,很简单:
1、第一步,我们需要建立一项任务,我们的任务需要继承java.util.TimerTask

package com.test;

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

public class TimeTask extends TimerTask {

@Override
public void run() {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月 HH:mm:ss");
System.out.println(sdf.format(new Date()));
}

}

2、我们需要启动我们的任务

package com.test;

import java.util.Timer;


/**
* @author dgl
*
*/
public class Say{


public static void main(String[] args) throws Exception {
Timer timer=new Timer();
timer.schedule(new TimeTask(), 1000, 3000);//注册此任务在第一次运行后的1秒钟时间执行,以后每隔3秒钟时间执行一次。
}

}

schedule(TimerTask task, long delay, long period)中task指定了需要执行的任务,delay指定在第一次运行任务后的多少毫秒执行此任务,period参数指定在以后的多少毫秒执行一次任务。

我们可以看到,很遗憾的是Timer只可以指定多久执行一次,并不能指定在具体那个时间点执行这项任务,比如说我们需要每天午夜1:00执行某一任务,而正是QuartZ调度器起作用的时候了。关于QuartZ的更多信息可以访问http://www.opensymphony.com/quartz/,下面让我们来看QuartZ是怎么工作的吧!

创建一项任务


public class Shedule {
//this class do daily task for message awoke and cycle task

public Shedule() {

}
public void say(){
//cycleTask();

messageAwoke();

}
}




package com.test.action;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class DailySay extends QuartzJobBean {
private Shedule sh ;

@Override
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
sh.say();
}

public Shedule getSh() {
return sh;
}

public void setSh(Shedule sh) {
this.sh = sh;
}

}

我们使用Spring的注入容器注入Shedule;


2、调度cron任务

在Spring配置文件中


<bean id="task" class="com.test.action.Shedule">
<property name="hibernateSession" ref="hibernateSession"></property>
</bean>
<bean id="job" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.test.action.DailySay"></property>
<property name="jobDataAsMap">
<map>
<entry key="sh" value-ref="task"></entry>
</map>
</property>
</bean>
<bean id="report" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="job"></property>
<property name="cronExpression" value="0 0 1 * * ?"></property>
</bean>


3、启动任务


<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="report"/>
</list>
</property>
</bean>

这样你将会完成每天凌晨1:00钟启动Shedule 任务的功能。

 

Timer与Spring Quartz 定时执行程序

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
前言:   最近要写一个定时任务, 用于同步数据. 以往这种涉及数据库操作的定时脚本, 都会采用pytho
我们做一个关于quartz的简单例子:定时像控制台打印输出语句 程序结构如下: web.xml文件内容如下:
使用Spring 3.2.0 + Quartz 2.2.1 做定时任务方法: 1、Maven的pom.xml: <project xmlns="http:
为了方便记录,写了些东西,部分是自己写,部分从其他地方摘录。 1.我使用的是定义JobDetailBean方
java代码: package com.malq; import java.util.Date; public class SayHelloJob { public void sa
1.spring配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.spr
Spring + Quartz可以使用annoation方式: 1、AppJob类: package com.my.quartz.testquartz1; impor
标题:Spring Quartz 定时任务 使用Quartz调度器 Quartz调度器为调度工作提供了更丰富的支持。和Jav
第一个例子。timer定时器。(这个比较简单,timer是java.util包下一个类) 为了更好的了解,我写了
applicationContext.xml <import resource="applicationContext-quartz.xml" /> applicationC
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号