背景:最近项目,需要用到定时任务,所以就网上查了些资料,然后配置了下,因为项目用的是spring ,所以看的也是关于spring的定时任务,下面就说下自己的理解,记录下,也是便于自己下次用到的时候便于查看。
实现技术:因为使用的是spring MVC 所以使用spring的quartz ,下面就来说下具体流程:
1.配置调度工厂
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger"/>
</list>
</property>
</bean>
2.配置调度方式(两者选一)
2.1 每隔指定时间,进行调度
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="reportTask" />
<property name="startDelay" value="0" />调度工厂实例化后,经过0秒开始执行调度
<property name="repeatInterval" value="500000" />每2秒调度一次 </bean>
2.2 每到指定时间,进行调度
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="reportTask" />
<!-- 每天12:00运行一次 -->
<property name="cronExpression" value="0 0 12 * * ?" />
</bean>
3.配置要调度的任务具体实现
<bean id="reportTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<bean class="com.my.task.ReportDateTask" />
</property>
<property name="targetMethod" value="reportData" />
<property name="concurrent" value="false" /><!-- 作业不并发调度 -->
</bean>
4.定义具体实现类,就是一个普通的java类即可。
关于上面的配置:站在面向对象的角度来说下我的理解
需要一个任务调度工厂,按某种频率和方式,来调用执行具体的任务实现。
所以这样的话,就需要三个对象:工厂类,方式类和具体实现类
工厂类------需要------》方式类------------》然后方式类中需要关联到作用类也就是具体实现类。
便于理解配置。