如何配置Spring定时器准确运行时间?

2025-01-05 02:28:03
推荐回答(1个)
回答1:

Spring中有自带任务调度框架Quartz ,直接在xml配置文件中配置就好。

一般我们使用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{  @Resourcepublic 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;}