1 JavaTimer 定时器
Ø 使用Java原生TimerTask编写定时器,交由Spring管理运行。定义一个TimerTask如下:
public class TimerTask01extends TimerTask {
@Override
public void run() {
System.out.println("timer task01");
}
}
Ø XML配置如下:
10000
3000
【注】在配置定时器的配置文件里,该属性必须为false,
定义spring启动时即创建bean实例,才能正常运行定时器。若设置为true则spring启动后定时器不执行。
2 Spring Quartz 定时器
Ø 定义任务类
有两种方式,一个是继承QuartzJobBean类,一个是普通的Java类。
A、继承QuartzJobBean类:
package timer;
public class QZTimerTask01 extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContextarg0) throws JobExecutionException {
System.out.println("【QZTimerTask01】");
}
}
对应的配置文件里任务定义:
timer.QZTimerTask01
B、定义一个普通类用于执行定时任务:
public class QZTimerTask02 {
public void doTask() {
System.out.println("【QZTimerTask02】");
}
}
对应的配置文件里任务定义:
doTask
Ø 定义任务触发器
Quartz的org.quartz.Trigger类描述了何时及以怎样的频度运行一个Quartz工作。
Spring提供了两个触发器:SimpleTriggerBean和CronTriggerBean。
SimpleTriggerBean与scheduledTimerTasks类似。指定工作的执行频度,模仿scheduledTimerTasks配置。
1000
1000
3/5 * * * * ?
Ø 启动定时器
3 Spring 注解方式
Ø 定义定时器如下,即一个普通的类:
@Component
public class TimerTask03 {
@Scheduled(fixedRate=1000) // 只能有一个参数
public void doTask(){
System.out.println("== timertask 03 ==");
}
@Scheduled(fixedRate=2000) // 只能有一个参数
public void doTask2(){
System.out.println("== timer task04 ==");
}
// 可定义多个定时方法
}
Ø 配置文件:
A、添加命名空间:
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"
default-lazy-init="false">
B、打开定时器开关
【注】在配置的配置文件里,同样需要设置:
default-lazy-init="false"