24.3.使用JDK Timer支持类
优质
小牛编辑
130浏览
2023-12-01
24.3. 使用JDK Timer支持类
另外一个调度任务的途径是使用JDK Timer对象。更多的关于Timer
的信息可以在这里http://java.sun.com/docs/books/tutorial/essential/threads/timer.html找到。 上面讨论的概念仍可以应用于Timer的支持。你可以创建定制的timer或者调用某些方法的timer。包装timers的工作由TimerFactoryBean
完成。
24.3.1. 创建定制的timers
你可以使用TimerTask
创建定制的timer tasks,类似于Quartz中的jobs:
public class CheckEmailAddresses extends TimerTask { private List emailAddresses; public void setEmailAddresses(List emailAddresses) { this.emailAddresses = emailAddresses; } public void run() { // iterate over all email addresses and archive them } }
包装它很简单:
<bean id="checkEmail"> <property name="emailAddresses"> <list> <value>test@springframework.org</value> <value>foo@bar.com</value> <value>john@doe.net</value> </list> </property> </bean> <bean id="scheduledTask"> <!-- wait 10 seconds before starting repeated execution --> <property name="delay" value="10000" /> <!-- run every 50 seconds --> <property name="period" value="50000" /> <property name="timerTask" ref="checkEmail" /> </bean>
注意若要让任务只运行一次,你可以把period
属性设置为0(或者负值)。
24.3.2. 使用 MethodInvokingTimerTaskFactoryBean
类
和对Quartz的支持类似,对Timer
的支持也包含一个组件,可以让你周期性的调用某个方法:
<bean id="doIt"> <property name="targetObject" ref="exampleBusinessObject" /> <property name="targetMethod" value="doIt" /> </bean>
以上的例子会调用exampleBusinessObject
对象的doIt
方法。(见下):
public class BusinessObject { // properties and collaborators public void doIt() { // do the actual work } }
将上例中ScheduledTimerTask
的timerTask
引用修改为doIt
,bean将会用一个固定的周期来调用doIt
方法。
24.3.3. 打包:使用TimerFactoryBean
来设置任务
TimerFactoryBean
类和Quartz的SchedulerFactoryBean
类有些类似,它们是为同样的目的而设计的:设置确切的任务计划。TimerFactoryBean
对一个Timer进行配置,设置其引用的任务的周期。你可以指定是否使用背景线程。
<bean id="timerFactory"> <property name="scheduledTimerTasks"> <list> <!-- see the example above --> <ref bean="scheduledTask" /> </list> </property> </bean>