四、实现动态定时任务
什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定)。
这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文件,但总需要重新启动web服务啊,研究了下Quartz在Spring中的动态定时,发现
什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定)。
这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文件,但总需要重新启动web服务啊,研究了下Quartz在Spring中的动态定时,发现
引用
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean" >
<property name="jobDetail" ref="schedulerJobDetail"/>
<property name="cronExpression">
<value>0/10 * * * * ?</value>
</property>
中 cronExpression是关键,如果可以动态设置 cronExpression的值,就可以顺利解决问题了。这样我们就不能直接使用org.springframework.scheduling.quartz.CronTriggerBean,需要自己实现一个动态调度服务类,在其中构建CronTrigger或SimpleTrigger,动态配置时间。
动态调度服务接口:
Java代码
- package com.sundoctor.quartz.service;
- import java.util.Date;
- import org.quartz.CronExpression;
- public interface SchedulerService {
- /**
- * 根据 Quartz Cron Expression 调试任务
- * @param cronExpression Quartz Cron 表达式,如 "0/10 * * ? * * *"等
- */
- void schedule(String cronExpression);
- /**
- * 根据 Quartz Cron Expression 调试任务
- * @param name Quartz CronTrigger名称
- * @param cronExpression Quartz Cron 表达式,如 "0/10 * * ? * * *"等
- */
- void schedule(String name,String cronExpression);
- /**
- * 根据 Quartz Cron Expression 调试任务
- * @param cronExpression Quartz CronExpression
- */
- void schedule(CronExpression cronExpression);
- /**
- * 根据 Quartz Cron Expression 调试任务
- * @param name Quartz CronTrigger名称
- * @param cronExpression Quartz CronExpression
- */
- void schedule(String name,CronExpression cronExpression);
- /**
- * 在startTime时执行调试一次
- * @param startTime 调度开始时间
- */
- void schedule(Date startTime);
- /**
- * 在startTime时执行调试一次
- * @param name Quartz SimpleTrigger 名称
- * @param startTime 调度开始时间
- */
- void schedule(String name,Date startTime);
- /**
- * 在startTime时执行调试,endTime结束执行调度
- * @param startTime 调度开始时间
- * @param endTime 调度结束时间
- */
- void schedule(Date startTime,Date endTime);
- /**
- * 在startTime时执行调试,endTime结束执行调度
- * @param name Quartz SimpleTrigger 名称
- * @param startTime 调度开始时间
- * @param endTime 调度结束时间
- */
- void schedule(String name,Date startTime,Date endTime);
- /**
- * 在startTime时执行调试,endTime结束执行调度,重复执行repeatCount次
- * @param startTime 调度开始时间
- * @param endTime 调度结束时间
- * @param repeatCount 重复执行次数
- */
- void schedule(Date startTime,Date endTime,int repeatCount);
- /**
- * 在startTime时执行调试,endTime结束执行调度,重复执行repeatCount次
- * @param name Quartz SimpleTrigger 名称
- * @param startTime 调度开始时间
- * @param endTime 调度结束时间
- * @param repeatCount 重复执行次数
- */
- void schedule(String name,Date startTime,Date endTime,int repeatCount);
- /**
- * 在startTime时执行调试,endTime结束执行调度,重复执行repeatCount次,每隔repeatInterval秒执行一次
- * @param startTime 调度开始时间
- * @param endTime 调度结束时间
- * @param repeatCount 重复执行次数
- * @param repeatInterval 执行时间隔间
- */
- void schedule(Date startTime,Date endTime,int repeatCount,long repeatInterval) ;
- /**
- * 在startTime时执行调试,endTime结束执行调度,重复执行repeatCount次,每隔repeatInterval秒执行一次
- * @param name Quartz SimpleTrigger 名称
- * @param startTime 调度开始时间
- * @param endTime 调度结束时间
- * @param repeatCount 重复执行次数
- * @param repeatInterval 执行时间隔间
- */
- void schedule(String name,Date startTime,Date endTime,int repeatCount,long repeatInterval);
- }