背景:之前的图片搜索项目中需要用到定时任务创建图片库索引,查看网上资料后,决定用spring+quartz来做。
首先:在Spring配置文件中增加本业务类(略掉,准备用原有的action)
<!-- 图片搜索的Action -->
<bean id="searchImg" class="com.eelly.imagesearch.action.ImgSearchAction">
<property name="imgSearch">
<ref bean="ImgSearchService" />
</property>
</bean>
第二步:定义任务(在Spring配置文件中配置代理类MethodInvokingJobDetailFactoryBean,定义任务的详细信息)
<bean id="createIndexTask" class= "org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="searchImg" />
<property name="targetMethod" value="createIndex" />
<property name="concurrent" value="false" />
</bean>
备注:这个配置告诉Spring,我们的任务是执行id为businessReport的bean中的perform函数。其中参数concurrent告诉Spring,不要并发运行这个任务。
第三步:配置一个触发器(在Spring配置文件中配置触发器类CronTriggerBean)
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="createIndexTask" />
<property name="cronExpression" value="0 0 1 * * ?" />
</bean>
备注:触发器将告诉Quartz两件事:在何时触发任务、触发哪个任务。其中属性参数cronExpression为调度时间,格式和unix上的 crontab类似(依次对应秒,分,时,日,月,周,其中问号表示忽略该位置(星期)上的值);属性参数jobDetail指向具体的任务bean:reportTask 。如果你有多个任务,每个任务的触发时间都不一样,则你可以在此配置多个不同的触发器。
第四步:配置一个调度器(在Spring配置文件中配置调度器类SchedulerFactoryBean)
<bean class= "org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>
备注:该调度器用于管理触发器(只有在调度器中列表出现的触发器才被Quartz系统调度执行。至此,所有的配置已完成
第五步:检查jar包(spring-context-support.jar,commons-collections-3.1.jar,jta.jar另外重点需要一个合适的quartz的jar包)
参照资料:http://blog.csdn.net/xxtjp/article/details/7016517 (配置流程)
http://blog.sina.com.cn/s/blog_6236e37f010143mz.html (检查jar包)
http://blog.csdn.net/wanlixingzhe/article/details/7258393 (检查jar包)
http://kevin19900306.iteye.com/blog/1397744 (判断合适的quartz合适的jar包)
http://jarfiles.pandaidea.com/quartz.html (quartz的jar下载地址)