2011-09-09 13 views
0

私はXMLファイルで構成されたスケジュールされたジョブがあります。クエリ/更新春3スケジュールされたタスクのcron表現

<task:scheduled-tasks scheduler="taskScheduler"> 
    <task:scheduled ref="scheduledJobs" method="doSomething" cron="30 * * * * ?"/> 
</task:scheduled-tasks> 

<bean id="scheduledJobs" class="com.xxx.ScheduledJobs"/> 

<task:scheduler id="taskScheduler" pool-size="2" /> 

それはcronの式を照会(ユーザーに表示する)と、それを更新することが可能である(ありません必然的にXMLファイルではなくBeanインスタンスに)新しいcron式を使用しますか?

このタイプの機能を実現するには、より良い方法がありますか?

答えて

0

は、プログラマチックな方法で、短くしたバージョンで実現できます。

import org.springframework.beans.factory.InitializingBean; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.scheduling.TaskScheduler; 
import org.springframework.scheduling.TriggerContext; 
import org.springframework.scheduling.support.CronTrigger; 

public class ChangelogDeleterTask implements InitializingBean, Runnable { 

    @Autowired 
    private TaskScheduler scheduler; 
    private ScheduledFuture<?> scheduledTask; 
    private CronTrigger trigger; 
    private Date nextExecutionTime; 

    @Override 
    public void afterPropertiesSet() throws Exception { 
    schedule("0/5 * * * * *"); 
    } 

    @Override 
    public void run() {/*do scheduled job*/} 

    public synchronized void schedule(String cronExpression) { 
    scheduledTask.cancel(false); 
    trigger = new MyCronTrigger(cronExpression); 
    scheduledTask = scheduler.schedule(this, trigger); 
    } 

    String getNextExecutionTime() { 
    return nextExecutionTime.toString(); 
    } 

    String getExpression() { 
    return trigger.getExpression(); 
    } 

    /** 
    * Class allows to remember nextExecutionTime. 
    */ 
    private class MyCronTrigger extends CronTrigger { 
    public ChangelogCronTrigger(String expression) { 
     super(expression); 
    } 

    @Override 
    public Date nextExecutionTime(TriggerContext triggerContext) { 
     Date date = super.nextExecutionTime(triggerContext); 
     nextExecutionTime = new Date(date.getTime()); 
     return date; 
    } 
    } 
} 
関連する問題