`
yuwenlin2008
  • 浏览: 124991 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring+Quartz配置总结

阅读更多

用过好几次Spring+Quartz配置,来做定时任务,以前也用jdk自带的Timer,今天来好好总结下Spring+Quartz配置吧。

 

在Spring中使用Quartz有两种方式实现:第一种是任务类继承QuartzJobBean,第二种则是在配置文件里定义任务类和要执行的方法,类和方法仍然是普通类。很显然,第二种方式远比第一种方式来的灵活。

这里详细介绍下第二种方式

 

一、先引用jar包,这里用maven

spring相关的所有包,这里用spring3.2.3

quartz有1.x版本,有2.x版本,都能与spring3集成,但方式有点不一样,下面讲

先用1.x版本

 

<dependency>
		<groupId>org.quartz-scheduler</groupId>
		<artifactId>quartz</artifactId>
		<version>1.8.4</version>
	</dependency>

 spring相关的包太多,省略。。。

 

 

二、xml配置

新建applicationContext-quartz.xml配置文件,专门用来配置quartz,记得要让web.xml加载它。

1.Scheduler的配置

 

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
       <property name="triggers">  
           <list>  
              <ref bean="testTrigger"/>  
           </list>  
       </property>  
       <property name="autoStartup" value="true"/>  
	</bean>

 

说明:Scheduler包含一个Trigger列表,每个Trigger表示一个作业。

2.Trigger的配置

 

<bean id="testTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
       <property name="jobDetail" ref="testJobDetail"/>  
       <property name="cronExpression" value="*/5 * * * * ?"/><!-- 每隔5秒钟触发一次 -->  
	</bean>

 

说明:

         1)Cron表达式的格式:秒 分 时 日 月 周 年(可选)。

               字段名                 允许的值                        允许的特殊字符  

               秒                         0-59                               , - * /  

               分                         0-59                               , - * /  

               小时                   0-23                               , - * /  

               日                         1-31                               , - * ? / L W C  

               月                         1-12 or JAN-DEC          , - * /  

               周几                     1-7 or SUN-SAT            , - * ? / L C #  

               年 (可选字段)     empty, 1970-2099      , - * /

 

               “?”字符:表示不确定的值

               “,”字符:指定数个值

               “-”字符:指定一个值的范围

               “/”字符:指定一个值的增加幅度。n/m表示从n开始,每次增加m

               “L”字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X

               “W”字符:指定离给定日期最近的工作日(周一到周五)

               “#”字符:表示该月第几个周X。6#3表示该月第3个周五

 

         2)Cron表达式范例:

                 每隔5秒执行一次:*/5 * * * * ?

                 每隔1分钟执行一次:0 */1 * * * ?

                 每天23点执行一次:0 0 23 * * ?

                 每天凌晨1点执行一次:0 0 1 * * ?

                 每月1号凌晨1点执行一次:0 0 1 1 * ?

                 每月最后一天23点执行一次:0 0 23 L * ?

                 每周星期天凌晨1点实行一次:0 0 1 ? * L

                 在26分、29分、33分执行一次:0 26,29,33 * * * ?

                 每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ? 

3.JobDetail的配置

<bean id="testJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">   
        <property name="targetObject" ref="testJob"/>  
        <property name="targetMethod" value="execute"/>  
        <property name="concurrent" value="false"/>
        <!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 -->  
	</bean>

4.业务类的配置

<bean id="testJob" class="com.antu.back.farmer.service.quartz.TestJob"/>

三、业务类源代码

package com.antu.back.farmer.service.quartz;

import java.util.Date;

public class TestJob {
	
    public void execute(){  
        try{  
              System.out.println("invoke at: "+new Date(System.currentTimeMillis()));
         }catch(Exception ex){  
             ex.printStackTrace();  
         }  
     }  
}

说明:业务类不需要继承任何父类,也不需要实现任何接口,只是一个普通的java类。

四、发布到tomcat,启动测试如下

2016-2-16 13:54:00 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-bio-8080"]
2016-2-16 13:54:00 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-bio-8009"]
2016-2-16 13:54:00 org.apache.catalina.startup.Catalina start
信息: Server startup in 6970 ms
invoke at: Tue Feb 16 13:54:05 CST 2016
invoke at: Tue Feb 16 13:54:10 CST 2016
invoke at: Tue Feb 16 13:54:15 CST 2016
invoke at: Tue Feb 16 13:54:20 CST 2016
invoke at: Tue Feb 16 13:54:25 CST 2016

可以看到服务正常启动后,定时器任务就每隔5秒执行一次。

 

上面是spring3.x与quartz1.x集成,再来看spring3与quartz2.x如何集成,其实只需要稍做修改

1.quartz使用2.1.3版本

<dependency>
		<groupId>org.quartz-scheduler</groupId>
		<artifactId>quartz</artifactId>
		<version>2.1.3</version>
	</dependency>

2.修改Trigger的配置

<bean id="testTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">  
       <property name="jobDetail" ref="testJobDetail"/>  
       <property name="cronExpression" value="*/5 * * * * ?"/><!-- 每隔1秒钟触发一次 -->  
	</bean>

说明,其实就是将CronTriggerBean换成CronTriggerFactoryBean,就可以了   

3.重启tomcat测试,发现没有问题

 

五、业务类源代码TestJob中可以正常使用spring配置的service或dao

package com.antu.back.farmer.service.quartz;

import java.util.Date;

import org.springframework.beans.factory.annotation.Autowired;

import com.antu.back.farmer.service.spi.IFarmerService;

public class TestJob {
	
	@Autowired
	private IFarmerService farmerServiceImpl;
	
    public void execute(){  
        try{  
              System.out.println("invoke at: "+new Date(System.currentTimeMillis()));
         }catch(Exception ex){  
             ex.printStackTrace();  
         }  
     }  
}

说明:这里farmerServiceImpl是由spring注解声明的bean,在我们的计时器任务中可以正常使用。

 

以上就是spring3与quartz1.x、quartz2.x集成方式。

分享到:
评论

相关推荐

    Spring整合quartz2.2.3总结,quartz动态定时任务,Quartz定时任务集群配置

    NULL 博文链接:https://fanshuyao.iteye.com/blog/2392350

    Spring中Quartz的配置[总结].pdf

    Spring中Quartz的配置[总结].pdf

    spring quartz学习总结: cluster的配置和示例

    NULL 博文链接:https://shmilyaw-hotmail-com.iteye.com/blog/2169156

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点实施 ...

    Spring.3.x企业应用开发实战(完整版).part2

    2.2.3 类包及Spring配置文件规划 2.3 持久层 2.3.1 建立领域对象 2.3.2 UserDao 2.3.3 LoginLogDao 2.3.4 在Spring中装配DAO 2.4 业务层 2.4.1 UserService 2.4.2 在Spring中装配Service 2.4.3 单元测试 2.5 展现层 ...

    Spring 2.0 开发参考手册

    6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点...

    Spring中文帮助文档

    6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点运算 ...

    spring chm文档

    6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点...

    Spring API

    6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点运算 ...

    Spring3.x企业应用开发实战(完整版) part1

    2.2.3 类包及Spring配置文件规划 2.3 持久层 2.3.1 建立领域对象 2.3.2 UserDao 2.3.3 LoginLogDao 2.3.4 在Spring中装配DAO 2.4 业务层 2.4.1 UserService 2.4.2 在Spring中装配Service 2.4.3 单元测试 2.5 展现层 ...

    Eclipse开发分布式商城系统+完整视频代码及文档

    │ 06.jedis客户端在spring中的配置.avi │ 07.测试spring中的JedisClient.avi │ 08.缓存同步-服务发布.avi │ 09.后台调用缓存同步服务.avi │ 10.solr单机版安装.avi │ 11.中文分析器配置.avi │ 12.导入数据-...

Global site tag (gtag.js) - Google Analytics