Quartz 集成Spring的2种方法

引言

关于Spring集成Quartz有2种方法:

  1. JobDetailBean.
  2. MethodInvokeJobDetailFactoryBean.

版本:

spring:4.3.5
quartz:2.2.1

注意点

  1. spring3.1之前的版本只能使用quartz1.x系列,spring3.2及以上版本才支持quartz2.x
  2. 则是spring对于quartz的支持实现org.springframework.scheduling.quartz.CronTriggerBean继承了org.quartz.CronTrigger,在quartz1.x系列中org.quartz.CronTrigger是个类,而在quartz2.x系列中org.quartz.CronTrigger变成了接口,从而造成无法用spring的方式配置quartz的触发器(trigger)。
  3. spring3以后,从原来的一个jar变成了现在的好几个jia包.而对quartz支持的jar包在spring-support这个里,所以在使用Spring集成Quartz的时候,一定不要忘记引入spring-support这个包:
    3.1 spring-support.jar 这个jar 文件包含支持UI模版(Velocity,FreeMarker,JasperReports),邮件服务,脚本服务(JRuby), 缓存Cache(EHCache),任务计划Scheduling(uartz)方面的类。
    3.2 外部依赖spring-context, (spring-jdbc, Velocity, FreeMarker, JasperReports, BSH, Groovy, JRuby, Quartz, EHCache)

maven导入的包如下 部分pom.xml的内容



    org.quartz-scheduler
    quartz
    ${quartz.version}




    org.springframework
    spring-context-support
    ${spring.version}


    org.springframework
    spring-webmvc
    ${spring.version}


    org.springframework
    spring-core
    ${spring.version}


    org.springframework
    spring-core
    ${spring.version}



    org.springframework
    spring-web
    ${spring.version}



    org.springframework
    spring-jdbc
    ${spring.version}



    org.springframework
    spring-test
    ${spring.version}



    org.springframework
    spring-oxm
    ${spring.version}

Spring集成Quartz方法一:JobDetailBean

  1. 创建一个Job方法,此方法必须继承QuartzJobBean 或者 实现Job方法。
package com.ruixunyun.www.quartz;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;

public class TaskPeakStatistics implements Job{
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("quartz 执行了");
    }
}
  1. XML配置

新建一个xml文件:取名: spring-quartz.xml




    
        
        
    

    
        
        
        
    

    
    
        
        
            
                
            
        
    

  1. 将此xml文件导入到servlet.xml中,spring-servlet.xml是除web.xml的另一个xml,就是这个:
Quartz 集成Spring的2种方法_第1张图片

 

Spring集成Quartz方法二:MethodInvokeJobDetailFactoryBean

  1. 创建一个Job类,此类不需要继承任何类或者实现任何接口:
package com.ruixunyun.www.quartz;

import com.ruixunyun.www.service.IQuartzService;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;

//@Component
public class TaskPeakStatisticsTest{
    @Autowired
    private IQuartzService quartzService;

    public void doSomething() {
        System.out.println("quartz 执行了");
        try{
            List quartzTask = quartzService.quartzQuerytask();
        }catch (Exception e){
            System.out.println(e);
        }
        System.out.println("quartz 执行了2");
    }
}
  1. XML配置
    新建一个xml文件:取名: spring-quartz.xml



    
    
    

    
    
        
        
        
        
        
    

    
    
        
        
        
    

    
        
            
                
            
        
    

  1. 将此xml文件导入到servlet.xml中
    

综上:定时任务的基本配置完成。

两种方法的简单说明

使用QuartzJobBean,需要继承。而使用MethodInvokeJobDetailFactoryBean则需要指定targetObject(任务实例)和targetMethod(实例中要执行的方法)

后者优点是无侵入,业务逻辑简单,一目了然,缺点是无法持久化(目前还不太清楚这点!)

更推荐的第二种,其中一个很重要的原因就是因为定时任务中注入相关Service的时候,后者可以直接注入,而前者还需要进行Schedular的替换修改。

参考文献

http://www.cnblogs.com/LiuChunfu/p/5598610.html
https://devilspace.org/2014/09/11/quartz2-2-2-1-integrtaion-with-spring-4-4-0-5-release-with-maven-build-tool/
http://blog.csdn.net/jingyang07/article/details/74983099
http://websystique.com/spring/spring-4-quartz-scheduler-integration-example/

你可能感兴趣的:(Quartz 集成Spring的2种方法)