用spring实现定时调度
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" />
??????????????? </entry>
??????????? </map>
?????? </property>
???? </bean>
???? <bean id="simpleReportTrigger" />
???????? </property>
???????? <!--这儿配置起始执行需要延迟多长时间-->
???????? <property name="startDelay">
?????????????<value>1000</value>
???????? </property>
???????? <!--这儿配置每次执行的间隔时间-->
???????? <property name="repeatInterval">
???????????? <value>2000</value>
???????? </property>
????? </bean>
??????<!-- 配置一个触发器 -->
????? <bean id="cronReportTrigger" />
????????? </property>
????????? <!--这儿可以准确配置任务执行的时间,如下面为每天的21:01:00执行任务-->
????????? <property name="cronExpression">
????????????? <value>0 1 21 * * ?</value>
????????? </property>
????? </bean>
????? <!-- 添加上面配置好的触发器,可添加多个 -->
????? <bean />
????????????? </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触发