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>