Spring集成Quartz任务调度

      最近项目中用到了Quartz任务调度来实现定时任务的功能,遂做小结,以便学习交流之用。Quartz是一个开源的作业调度框架,可以用它来创建简单或者多个复杂的任务,并让这些任务按计划执行。我所做的项目是使用了Spring中集成的Quartz插件,首先说明一下需求背景,这里要实现的一个功能是定时将满足条件的商铺推荐给用户。

     整体思路是这样子的,首先编写好需要做定时任务的业务逻辑方法;紧接着做Quartz任务调度的配置,包括线程池,业务逻辑bean,添加要定时任务的方法,调度触发器,添加任务调度;

     1、编写需要做定时任务的业务方法

public class ShopRecommendJob {
	private static final Logger logger = LoggerFactory.getLogger(ShopRecommendJob.class);
	public void shopRecommendJobMethod(){
		try {
			//商铺推荐的业务逻辑方法
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("定时任务失败:"+e.getMessage());
		}
	}
}
     2、Quartz任务调度的配置(主要是Spring的配置,因为这里使用的是Spring集成Quartz)

     (1)线程池配置

        <!-- 使用spring的线程池 -->
 	<bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
 		<property name="corePoolSize" value="10" />
 		<property name="maxPoolSize" value="100" />
 		<property name="queueCapacity" value="500" />
	</bean>
       这里使用的是spring-context-3.1.1.RELEASE.jar包下的org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor类,其中,配置ThreadPoolTaskExecutor类几个属性的含义分别是:

      corePoolSize:线程池维护线程的最少数量

      maxPoolSize:线程池维护线程的最大数量

      queueCapacity:线程池所使用的缓冲队列

     (2)定义包含需要定时任务的业务逻辑方法Bean

      <bean id="shopRecommendJob" class="com.jobs.ShopRecommendJob"></bean>
      这个类里面有你定义的需要做定时任务的逻辑方法(即包含shopRecommendJobMethod()方法的类ShopRecommendJob )。

     (3)添加要定时任务的方法

      <bean id="shopRecommendTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
        <property name="targetObject">
             <!-- 包含定时任务方法的Bean,即第二步中定义的shopRecommendJob Bean -->
             <ref bean="shopRecommendJob"/>
        </property>
        <property name="targetMethod">
             <!-- 你的定时任务方法 -->
             <value>shopRecommendJobMethod</value>
        </property>
      </bean>

     MethodInvokingJobDetailFactoryBean类是在spring-context-support-3.1.1.RELEASE.jar包中org.springframework.scheduling.quartz路径下。

     (4)配置触发器

    <bean id="shopRecommendTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
      <property name="jobDetail">           
           <!-- 这里是第三步配置的定时任务 -->
           <ref bean="shopRecommendTask"/> 
      </property> 
      <property name="cronExpression">
           <!-- 这里是定时任务的表达式,此处的意思是“每天凌晨1点30执行一次” -->
           <value>0 30 1 * * ?</value>
     </property> 
   </bean>
     触发器Bean,CronTriggerBean是引用于spring-context-support-3.1.1.RELEASE.jar包中的org.springframework.scheduling.quartz路径下。另外,关于定时任务的表达式,这里没有整理总结,网上有很多。

    (5)添加任务调度

    <bean autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
       <property name="triggers">
         <list>
           <!-- 这里写第四步配置的触发器,可以有多个,写法如下 --> 
           <ref bean="shopRecommendTrigger"/> 
         </list>
       </property>
         <!-- 这里引用第一步配置的Spring线程池 -->
         <property name="taskExecutor" ref="executor"></property>
    </bean>
    任务调度工厂Bean,SchedulerFactoryBean是在spring-context-support-3.1.1.RELEASE.jar包中的org.springframework.scheduling.quartz路径下。

    至此,任务调度的配置完成。当然,如果你的这些配置时单独写在一个XML文件中,别忘了将这个Spring配置文件引入总的Spring文件中,并在web.xml配置监听器,将Spring总的配置文件配置进去。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值