The other way to schedule jobs in Spring is to use JDK
Timer objects. You can create custom timers or
use the timer that invokes methods. Wiring timers is done using the
TimerFactoryBean.
Using the TimerTask you can create customer
timer tasks, similar to 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 } }
Wiring it up is simple:
<bean id="checkEmail" class="examples.CheckEmailAddress"> <property name="emailAddresses"> <list> <value>[email protected]</value> <value>[email protected]</value> <value>[email protected]</value> </list> </property> </bean> <bean id="scheduledTask" class="org.springframework.scheduling.timer.ScheduledTimerTask"> <!-- 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>
Note that letting the task only run once can be done by changing the
period property to 0 (or a negative value).
Similar to the Quartz support, the Timer support also features
a component that allows you to periodically invoke a method:
<bean id="doIt" class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean"> <property name="targetObject" ref="exampleBusinessObject" /> <property name="targetMethod" value="doIt" /> </bean>
The above example will result in the doIt method being called on the
exampleBusinessObject (see below):
public class BusinessObject { // properties and collaborators public void doIt() { // do the actual work } }
Changing the timerTask reference of the
ScheduledTimerTask example to the bean doIt
will result in the doIt method being executed on a fixed schedule.
The TimerFactoryBean is similar to the Quartz
SchedulerFactoryBean in that it serves the same
purpose: setting up the actual scheduling. The TimerFactoryBean
sets up an actual Timer and schedules the tasks it has
references to. You can specify whether or not daemon threads should be used.
<bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean"> <property name="scheduledTimerTasks"> <list> <!-- see the example above --> <ref bean="scheduledTask" /> </list> </property> </bean>