一般我们使用spring定时器的时候都是配置的固定时间在spring配置文件中,如果我们有一个时间设置页面,通过这个页面设置定时器的执行时间,就可以达到动态执行的效果。
上代码:
package com.test.action;
import java.text.ParseException;
import javax.annotation.Resource;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.springframework.scheduling.quartz.CronTriggerBean;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.opensymphony.xwork2.ActionSupport;
public class TestAction extends ActionSupport{
@Resource
public CronTriggerBean triggerBean; //系统
public CronTriggerBean triggerTempBean;
@Resource
private Scheduler scheduler;
private String configTime;
public String configTime(){
try {
/*得到系统设置的定时器执行时间*/
System.out.println(triggerBean.getCronExpression());
/*得到指定定时器, testDoTrigger为applicationContext.xml中CronTriggerBean*/
triggerTempBean = (CronTriggerBean) scheduler.getTrigger("testDoTrigger", Scheduler.DEFAULT_GROUP);
/*指定定时器的执行时间*/
System.out.println(triggerTempBean.getCronExpression());
/*将指定定时器的执行时间设置为从前台传递过来的时间*/
triggerTempBean.setCronExpression(configTime);
/*让设置生效*/
scheduler.rescheduleJob("testDoTrigger", Scheduler.DEFAULT_GROUP,triggerTempBean);
} catch(ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch(SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return SUCCESS;
}
public String getConfigTime(){
return configTime;
}
public void setConfigTime(String configTime){
this.configTime = configTime;
}
}