Spring2.0
中的定时调度
(Scheduling)
作者:
ZhangRuiqiang
简介
Spring
包含了对定时调度服务的内置支持类。当前,
Spring
支持从
JDK1.3
开始内置的
Timer
类和
Quartz cheduler (http://www. opensymphony.com/ quartz/)
。二者都可以通过
FactoryBean
,分别指向
Timer
或
Trigger
实例的引用进行配置。更进一步,有个对
Quartz Scheduler
和
Timer
都有效的工具类可以让你调用某个目标对象的方法(类似通常的
MethodInvokingFactoryBean
操作)。
Spring
还包含有用于线程池调度的类,它针对
Java 1.3,1.4,5
和
JEE
环境的差异都进行了抽象。
使用
JDK Timer
支持类
使用
OpenSymphony Quartz
调度器
1
使用
JDK Timer
支持类
Ø
使用
TimerTask
创建定制的
timer tasks
<
bean
id
=
"timeTaskExample"
class
=
"example.timertask.TimeTaskExample"
></
bean
>
<!--
使用
ScheduledTimerTask
来包装任务
-->
<
bean
id
=
"scheduledTask"
class
=
"org.springframework.scheduling.timer.ScheduledTimerTask"
>
<
property
name
=
"timerTask"
ref
=
"timeTaskExample"
/>
<!—
任务执行周期
2m
关于一些任务的参数请参考
JDK doc
文档和
Spring
相关文档
注意若要让任务只运行一次,你可以把
period
属性设置为
0
(或者负值)
-->
<
property
name
=
"period"
>
<
value
>
2000
</
value
>
</
property
>
<!--
延时
1m
执行任务
-->
<
property
name
=
"delay"
>
<
value
>
1000
</
value
>
</
property
>
</
bean
>
<!--
使用
TimerFactoryBean
来实现任务
-->
<
bean
id
=
"timerFactory"
class
=
"org.springframework.scheduling.timer.TimerFactoryBean"
>
<
property
name
=
"scheduledTimerTasks"
>
<
list
>
<
ref
bean
=
"scheduledTask"
/>
</
list
>
</
property
>
</
bean
>
示例代码如下
package
example.timertask;
import
java.util.Date;
import
java.util.TimerTask;
public
class
TimeTaskExample
extends
TimerTask {
//
使用
TimerTask
创建定制的
timer tasks
@Override
public
void
run() {
//
你想要执行的任务的代码片段
,
例如
,
打印出当前时间
.
System.
out
.println(
"
现在时间
: "
+
new
Date());
}
}
applicationContext.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
=
"timeTaskExample"
class
=
"example.timertask.TimeTaskExample"
/>
<!--
使用
ScheduledTimerTask
来包装任务
-->
<
bean
id
=
"scheduledTask"
class
=
"org.springframework.scheduling.timer.ScheduledTimerTask"
>
<
property
name
=
"timerTask"
ref=
"timeTaskExample"
/>
<!--
任务执行周期
2m ->
<
property
name
=
"period"
>
<
value
>
2000
</
value
>
</
property
>
<!--
延时
1m
执行任务
-->
<