一般情况下,在web工程里面实现一个随着工程启动而自动启动的,并且定时完成某些操作的功能是很简单的.
比如在web.xml里面定义一个servlet,然后把load-on-startup定义为1即可.
具体的定时逻辑就在这个servlet里面实现的.
但是随着web开发的逐渐发展,大量比较好的框架得到了运用.如spring,springmvc等,这样的话,再直接修改web.xml就有点简单粗暴了.
所以就才用了spring+quartz来优雅的实现启动自动运行的定时任务.
本项目基于spring+springmvc实现,基本配置略去,仅仅提到了最主要的配置文件.
1. 定义一个bean文件作为要执行的task
<bean name="reportTask" class="com.aw.task.ReportTask" />
2. 定义一个bean,使用reportTask作为参数
1 <bean id="generateReport" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 2 <property name="targetObject"> 3 <ref bean="reportTask"/><!-- 指定具体拦截哪个定时任务 --> 4 </property> 5 <property name="targetMethod"> 6 <value>generate</value> 7 </property> 8 </bean>
3. 定义一个bean,使用generateReport作为参数
<!-- 用cron表达式定义定时任务执行时间 --> <bean id="gr" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="generateReport"/><!-- 指明要调用哪个任务 --> </property> <!-- cron表达式 --> <property name="cronExpression"> <value>0 0/5 * * * ?</value> </property> </bean>
其中cronExpression作为控制任务启动定时配置,我这个配置是每5分钟执行一次.
其他的配置请百度,有详细的解释
4. 定义入口bean
<bean id="startReport" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="gr"/> </list> </property> </bean>
完成了上面四步配置以后,就可以在web工程启动的时候,优雅的启动一个定时器任务了