Quartz了解

需求:小编这里要做一个定时器,定时同步对接方的增量数据,于是开始去了解定时器的用法,看大家都说Quartz框架十分的简单好用于是便使用了这个方式,并了解了这个框架,先上导图。

总的来说,Quartz框架所需的三大元素是:scheduler任务调度器,trigger出发器,jobdetail任务细节。

其中任务调度器里放置要执行的任务,任务细节里放置每个任务的定时执行时间,而触发器就是触发定时器开始定时执行任务的了。

spring定时器某给固定ip spring定时器实现_定时任务

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触发