2011-09-09 1 views
0

예약 된 작업 크론 :쿼리/업데이트 봄 3 내가 XML 파일에 구성된 예약 된 작업이 표현

<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" /> 

이 (안 크론 쿼리 식 (사용자에게 표시하기 위해)하고 업데이트 할 수입니다 반드시 XML 파일이지만 콩 인스턴스에서) 새로운 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; 
    } 
    } 
} 
관련 문제