Quartz了解
需求:小编这里要做一个定时器,定时同步对接方的增量数据,于是开始去了解定时器的用法,看大家都说Quartz框架十分的简单好用于是便使用了这个方式,并了解了这个框架,先上导图。
总的来说,Quartz框架所需的三大元素是:scheduler任务调度器,trigger出发器,jobdetail任务细节。
其中任务调度器里放置要执行的任务,任务细节里放置每个任务的定时执行时间,而触发器就是触发定时器开始定时执行任务的了。
Quartz2中实现方式
第一种是任务类继承QuartzJobBean,第二种则是在配置文件里定义任务类和要执行的方法,类和方法可以是普通类。很显然,第二种方式远比第一种方式来的灵活,我这里使用的是第二种配置方式,大家有兴趣可以自己试一下第一中配置方式。
1,首先在配置文件,配置三大要素。如下代码(我配置了两个定时任务,一个是定时数据库备份,一个是定时同步增量数据)
job1
<!-- ======================== 数据库备份 配置方法 ======================== -->
<!-- 执行的类(任务调度) -->
<bean id="backupDatabaseJob" class="com.oa.commons.job.TimingBackupDatabase"/>
<!-- 配置定时器 -->
<bean id="backupJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<!-- 定时执行的类 -->
<ref bean="backupDatabaseJob" />
</property>
<property name="targetMethod">
<!-- 定时执行的类方法 -->
<value>backupDatabase</value>
</property>
</bean>
<!-- 配置 执行时间 -->
<bean id="cronTriggerBean1" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="backupJobDetail"></property>
<!-- <property name="cronExpression" value="0 0 2 * * ?"></property> -->
<property name="cronExpression" value="0 0 2 * * ?"></property>
</bean>
job2
<!-- ======================== 用户增量数据同步 配置方法 ======================== -->
<!-- 执行的类 -->
<bean id="IncrementingData" class="com.oa.commons.job.TimingIncrementingData"/>
<!-- 配置定时器 -->
<bean id="backupJobDetail1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<!-- 定时执行的类 -->
<ref bean="IncrementingData" />
</property>
<property name="targetMethod">
<!-- 定时执行的类方法 -->
<value>syncdata</value>
</property>
</bean>
<!-- 配置 执行时间 (任务)-->
<bean id="cronTriggerBean2" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="backupJobDetail"></property>
<!-- <property name="cronExpression" value="0 0 2 * * ?"></property> -->
<property name="cronExpression" value="0 0 12 * * ?"></property>
</bean>
触发器(放置两个任务)
<!-- 触发器工厂,将所有的定时任务都注入工厂 激活定时任务-->
<bean id="SpringJobSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTriggerBean1"/>
<ref bean="cronTriggerBean2"/>
</list>
</property>
</bean>
定时表达式举例
“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触发