spring Quartz多个定时任务的配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring Quartz多个定时任务的配置相关的知识,希望对你有一定的参考价值。

 

Quartz多个定时任务的配置

 

1,配置文件与spring整合,需要在spring 的总配置中一入或者在web.xml中spring监听中加上

ztc_cp-spring-quartz.xml

注:定时器出触发的时间,根据需要自己设置

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="  
  5.     http://www.springframework.org/schema/beans  
  6.     http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">  
  7.   
  8.   
  9.   
  10.     <!-- spring自动任务调度器配置 -->  
  11.   
  12.   
  13.     <!-- 要调用的工作类 -->  
  14.     <bean id="quartzJob1" class="cn.hydom.ztc.ztc_cp.quartz.QuartzJob1"></bean>  
  15.     <bean id="quartzJob2" class="cn.hydom.ztc.ztc_cp.quartz.QuartzJob2"></bean>  
  16.     <bean id="quartzJob3" class="cn.hydom.ztc.ztc_cp.quartz.QuartzJob2"></bean>  
  17.       
  18.     <!-- 任务配置列表 -->  
  19.     <bean id="jobtask1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
  20.         <!-- 调用的类 -->  
  21.         <property name="targetObject">  
  22.             <ref bean="quartzJob1" />  
  23.         </property>  
  24.         <!-- 调用类中的方法 -->  
  25.         <property name="targetMethod">  
  26.             <value>work</value>  
  27.         </property>  
  28.          <!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 -->  
  29.          <property name="concurrent" value="false"/>  
  30.     </bean>   
  31.     <bean id="jobtask2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
  32.         <!-- 调用的类 -->  
  33.         <property name="targetObject">  
  34.             <ref bean="quartzJob2" />  
  35.         </property>  
  36.         <!-- 调用类中的方法 -->  
  37.         <property name="targetMethod">  
  38.             <value>work</value>  
  39.         </property>  
  40.     </bean>   
  41.     <bean id="jobtask3" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
  42.         <!-- 调用的类 -->  
  43.         <property name="targetObject">  
  44.             <ref bean="quartzJob3" />  
  45.         </property>  
  46.         <!-- 调用类中的方法 -->  
  47.         <property name="targetMethod">  
  48.             <value>work</value>  
  49.         </property>  
  50.     </bean>   
  51.       
  52.       
  53.       
  54.       
  55.       
  56.     <!-- 触发器配置  时间指定 -->  
  57.     <bean id="cronTrigger1" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">  
  58.         <property name="jobDetail" ref="jobtask1"></property>  
  59.         <!-- cron表达式 -->  
  60.         <property name="cronExpression">  
  61.             <!-- 每隔10秒执行一次 <value>0/10 * * * * ?</value> -->  
  62.             <!-- 每天每隔5分钟执行一次 <value>0 0/5 * * * ?</value> -->  
  63.              <value>0 0/5 * * * ?</value>  
  64.             <!-- 每天上午8点执行一次 <value>0 0 8 * * ?</value>-->  
  65.             <!-- 在每天下午16点到下午16:59期间的每1分钟触发 <value>0 * 16 * * ?</value> -->  
  66.         </property>  
  67.     </bean>  
  68.     <bean id="cronTrigger2" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">  
  69.         <property name="jobDetail" ref="jobtask2"></property>  
  70.         <!-- cron表达式 -->  
  71.         <property name="cronExpression">  
  72.             <!-- 每隔10秒执行一次 <value>0/10 * * * * ?</value> -->  
  73.             <!-- 每天每隔10分钟执行一次 <value>0 0/10 * * * ?</value> -->  
  74.             <!-- <value>0 0/10 * * * ?</value> -->  
  75.             <!-- 每天上午8点执行一次 <value>0 0 8 * * ?</value>-->  
  76.             <!-- 在每天下午16点到下午16:59期间的每1分钟触发 <value>0 * 16 * * ?</value> -->  
  77.             <!-- 每天凌晨1点执行一次 -->  
  78.             <value>0 0 1 * * ?</value>  
  79.         </property>  
  80.     </bean>  
  81.     <bean id="cronTrigger3" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">  
  82.         <property name="jobDetail" ref="jobtask3"></property>  
  83.         <!-- cron表达式 -->  
  84.         <property name="cronExpression">  
  85.             <!-- 每月最后一天23点30分执行一次 -->  
  86.             <value>0 30 23 L * ?</value>  
  87.         </property>  
  88.     </bean>  
  89.       
  90.     <!-- 总管理类 如果将lazy-init=‘false‘那么容器启动就会执行调度程序 -->  
  91.     <bean id="startQuertz" lazy-init="false" autowire="no"  
  92.         class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
  93.         <property name="triggers">  
  94.             <list>  
  95.                 <!-- 触发器列表    -->  
  96.                 <ref bean="cronTrigger1" />  
  97.                 <ref bean="cronTrigger2" />  
  98.                 <ref bean="cronTrigger3" />  
  99.             </list>  
  100.         </property>  
  101.     </bean>  
  102.   
  103. </beans>  
  104.       
  105.       
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">



	<!-- spring自动任务调度器配置 -->


 	<!-- 要调用的工作类 -->
	<bean id="quartzJob1" class="cn.hydom.ztc.ztc_cp.quartz.QuartzJob1"></bean>
	<bean id="quartzJob2" class="cn.hydom.ztc.ztc_cp.quartz.QuartzJob2"></bean>
	<bean id="quartzJob3" class="cn.hydom.ztc.ztc_cp.quartz.QuartzJob2"></bean>
	
	<!-- 任务配置列表 -->
	<bean id="jobtask1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<!-- 调用的类 -->
		<property name="targetObject">
			<ref bean="quartzJob1" />
		</property>
		<!-- 调用类中的方法 -->
		<property name="targetMethod">
			<value>work</value>
		</property>
		 <!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 -->
		 <property name="concurrent" value="false"/>
	</bean> 
	<bean id="jobtask2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<!-- 调用的类 -->
		<property name="targetObject">
			<ref bean="quartzJob2" />
		</property>
		<!-- 调用类中的方法 -->
		<property name="targetMethod">
			<value>work</value>
		</property>
	</bean> 
	<bean id="jobtask3" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<!-- 调用的类 -->
		<property name="targetObject">
			<ref bean="quartzJob3" />
		</property>
		<!-- 调用类中的方法 -->
		<property name="targetMethod">
			<value>work</value>
		</property>
	</bean> 
	
	
	
	
	
	<!-- 触发器配置  时间指定 -->
	<bean id="cronTrigger1" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<property name="jobDetail" ref="jobtask1"></property>
		<!-- cron表达式 -->
		<property name="cronExpression">
			<!-- 每隔10秒执行一次 <value>0/10 * * * * ?</value> -->
			<!-- 每天每隔5分钟执行一次 <value>0 0/5 * * * ?</value> -->
			 <value>0 0/5 * * * ?</value>
			<!-- 每天上午8点执行一次 <value>0 0 8 * * ?</value>-->
			<!-- 在每天下午16点到下午16:59期间的每1分钟触发 <value>0 * 16 * * ?</value> -->
		</property>
	</bean>
	<bean id="cronTrigger2" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<property name="jobDetail" ref="jobtask2"></property>
		<!-- cron表达式 -->
		<property name="cronExpression">
			<!-- 每隔10秒执行一次 <value>0/10 * * * * ?</value> -->
			<!-- 每天每隔10分钟执行一次 <value>0 0/10 * * * ?</value> -->
			<!-- <value>0 0/10 * * * ?</value> -->
			<!-- 每天上午8点执行一次 <value>0 0 8 * * ?</value>-->
			<!-- 在每天下午16点到下午16:59期间的每1分钟触发 <value>0 * 16 * * ?</value> -->
			<!-- 每天凌晨1点执行一次 -->
			<value>0 0 1 * * ?</value>
		</property>
	</bean>
	<bean id="cronTrigger3" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<property name="jobDetail" ref="jobtask3"></property>
		<!-- cron表达式 -->
		<property name="cronExpression">
			<!-- 每月最后一天23点30分执行一次 -->
			<value>0 30 23 L * ?</value>
		</property>
	</bean>
	
	<!-- 总管理类 如果将lazy-init=‘false‘那么容器启动就会执行调度程序 -->
	<bean id="startQuertz" lazy-init="false" autowire="no"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<!-- 触发器列表    -->
				<ref bean="cronTrigger1" />
				<ref bean="cronTrigger2" />
				<ref bean="cronTrigger3" />
			</list>
		</property>
	</bean>

</beans>
	
	

 

2,编写工作类

QuartzJob1.java QuartzJob2.java QuartzJob3.java

这3个类都一样,这里只写QuartzJob1,如果统一时间有多个任务要执行,可拆分成多个方法,在work方法中统一调用

  1. package cn.hydom.ztc.ztc_cp.quartz;  
  2.   
  3. import javax.annotation.Resource;  
  4.   
  5. import org.apache.commons.logging.Log;  
  6. import org.apache.commons.logging.LogFactory;  
  7.   
  8. import cn.hydom.ztc.ztc_cp.service.CarParkService;  
  9.   
  10.   
  11.   
  12.   
  13. /**  
  14.  * @Description: 定时器  
  15.  * @author whl  
  16.  * @date 2014-10-22  
  17.  */  
  18. public class QuartzJob1 {  
  19.       
  20.     //log4j  
  21.     private static final Log log = LogFactory.getLog("");  
  22.       
  23.       
  24.     @Resource  
  25.     private CarParkService carParkService;  
  26.       
  27.     /**  
  28.      * @Description: 定时任务调度主方法  
  29.      * @param      
  30.      * @return void    
  31.      * @throws  
  32.      * @author whl  
  33.      * @date 2014-10-22  
  34.      */  
  35.     public void work(){  
  36.   
  37.         task1();  
  38.   
  39.     }  
  40.       
  41.       
  42.     //扫描xxx  
  43.     public void task1(){  
  44.           
  45.         log.warn("QuartzJob1.task1()  每隔5分钟执行一次");  
  46.           
  47.           
  48.     }  
  49.   
  50. }  

以上是关于spring Quartz多个定时任务的配置的主要内容,如果未能解决你的问题,请参考以下文章

Spring的定时器quartz执行多个任务是同时执行的吗

quartz spring 实现动态定时任务

spring多个时间点定时任务怎么配

Spring+quartz集群配置,Spring定时任务集群,quartz定时任务集群

spring boot 整合 quartz 集群环境 实现 动态定时任务配置原

Spring+Quartz实现定时任务的配置步骤