今天在开发中遇到定时任务的问题,最初尝试在web.xml中配置一个Timer监听器来实现,但是,又和Jbpm的定时任务相冲突,请教公司一高手,说:用这个方式是不提倡的,最好用spring来实现。
方法如下:
XML配置如下:
注:cronExpression配置说明如下:
[b]字段 允许值 允许的特殊字符 [/b]
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可选) 留空, 1970-2099 , - * /
其中RedCaseTimerQuartz类要继承QuartzJobBean类
方法如下:
XML配置如下:
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="workingYearTrigger"/>
</list>
</property>
</bean>
<bean id="workingYearQuartzDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.zzxy.egov.ems.task.RedCaseTimerQuartz"/>
</bean>
<!-- 每年每月每日0点10分执行 -->
<bean id="workingYearTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="workingYearQuartzDetail"/>
<property name="cronExpression" value="0 10 0 * * ?"/>
</bean>
注:cronExpression配置说明如下:
[b]字段 允许值 允许的特殊字符 [/b]
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可选) 留空, 1970-2099 , - * /
其中RedCaseTimerQuartz类要继承QuartzJobBean类
public class RedCaseTimerQuartz extends QuartzJobBean {
protected final transient Log logger = LogFactory.getLog(this.getClass());
private boolean isRunning = false;
private String name = "自动查询超期件";
@Override
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
if(!isRunning){
this.isRunning = true;
String msg = null;
TimerTaskService timerTaskService = (TimerTaskService)BeanUtil.getBean("timerTaskService");
try {
timerTaskService.execInsertRedCaseByTimer();
msg = "定时任务‘" + name + "’执行成功!";
logger.info(msg);
} catch (Exception e) {
msg = "定时任务‘" + name + "’执行失败。";
logger.warn(msg, e);
e.printStackTrace();
}
}else{
logger.warn("定时任务‘" + name + "’正在执行。");
}
}
}