spring有两种执行定制调度的机制
一种是使用JDK 的TimerTask,在spring里面配置类似Timer的时间配置,但是这种方法不能准确设置一个起始时间。
另一种是使用spring + quartz实现,,当有任务触发时,spring会去调用quartzJob的execute()方法
这里使用第二种方法做一个实例
定时调度的任务执行类,需要导入一个quartz.jar包,去网上可以下载一个
----------------------------------------------------------------------------------------------------------------------------------
import org.springframework.scheduling.quartz.*;
import com.huatech.statistic.data.StatisticService;
public class StatTesk extends QuartzJobBean{
private StatisticService statisticService;
public void setStatisticService(StatisticService statisticService) {
this.statisticService = statisticService;
}
//这个函数是调度任务执行的入口
protected void executeInternal(JobExecutionContext jobExecutionContext) throws org.quartz.JobExecutionException {
//在这里面可以写需要定时执行的代码
}
}
----------------------------------------------------------------------------------------------------------------------------------
spring配置文件里面只需要配置如下几个主要参数就可以了:
----------------------------------------------------------------------------------------------------------------------------------
<beans>
<bean id="reportJob" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<!--下面是你要执行定时执行的类路径-->
<value>com.huatech.statistic.timer.StatTesk</value>
</property>
<property name="jobDataAsMap">
<map>
<!--这儿可以把自己写的BEAN注入到执行类,我这里面注入了自己的BEAN statisticService-->
<entry key="statisticService">
<ref bean="statisticService" />
</entry>
</map>
</property>
</bean>
<bean id="simpleReportTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail">
<ref bean="reportJob" />
</property>
<!--这儿配置起始执行需要延迟多长时间-->
<property name="startDelay">
<value>1000</value>
</property>
<!--这儿配置每次执行的间隔时间-->
<property name="repeatInterval">
<value>2000</value>
</property>
</bean>
<!-- 配置一个触发器 -->
<bean id="cronReportTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="reportJob" />
</property>
<!--这儿可以准确配置任务执行的时间,如下面为每天的21:01:00执行任务-->
<property name="cronExpression">
<value>0 1 21 * * ?</value>
</property>
</bean>
<!-- 添加上面配置好的触发器,可添加多个 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronReportTrigger" />
</list>
</property>
</bean>
</beans>
---------------------------------------------------------------------------------------------------------------------------------
下面是配置触发器触发时间的一些例子:
"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发