-
Jan 29th, 2012, 10:16 AM
#1
Dynamically Change the trigger for a scheduled task
Hi,
I have been playing around with Spring scheduling and created a simple scheduled task using the @Scheduled annotation and task:scheduler. This works very well and the annotations and task namespace simply everything. However I want to be able to dynamically change the trigger, I have checked a number of posts and could not find a satisfactory way of doing this. This is the solution that I have come up with.
This is the application context:
<util
roperties id="envProps" location="env.properties"/>
<bean class="org.springframework.beans.factory.config.Pr opertyPlaceholderConfigurer">
<property name="locations" value="classpath:env.properties"/>
</bean>
<context:component-scan base-package="com.colmac.test" />
<task:scheduler id="scheduler"/>
Here is the task that I want to run:
@Service
public class MyTask implements Runnable{
public void run() {
System.out.println("MyTask runnable");
}
}
And here is my scheduler:
@Service
public class MyScheduler {
@Autowired
ThreadPoolTaskScheduler tps;
ScheduledFuture sf;
CronTrigger trigger;
@Value("#{envProps.delay}")
public void setDelay(String cronExpression) {
System.out.println("the trigger = " + cronExpression);
trigger = new CronTrigger(cronExpression);
}
@Autowired
MyTask task;
public void start(){
sf = tps.schedule(task, trigger);
}
public void changeTrigger(String cronExpression){
System.out.println("change trigger to: " + cronExpression);
sf.cancel(false);
trigger = new CronTrigger(cronExpression);
start();
}
}
This seems to work for me. I am now able to start my schedular and dynamically change the trigger with a simple method call:
myScheduler.changeTrigger("*/15 * * * * *");
I am going to try next to see if I can use @Scheduled <task:annotation-driven scheduler="scheduler"/> and dynamically change the triggers in the annotated methods.
If anyone has a simpler solution or can see any problems with this please let me know.
Thanks
Jim
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules