`

Spring+Quartz整合

 
阅读更多

Quartz是一个非常优秀的任务调度引擎,详情请见官网:[url]http://www.quartz-scheduler.org/[/url]

而Spring很好地集成了Quartz,为企业级的任务调度提供了方便。

 

下面先看一个实现了Job接口的任务HelloWorldJob:

Java代码  收藏代码
  1. package com.springQuartz.example;  
  2.   
  3. import java.util.Map;  
  4.   
  5. import org.quartz.Job;  
  6. import org.quartz.JobExecutionContext;  
  7. import org.quartz.JobExecutionException;  
  8.   
  9. public class HelloWorldJob implements Job{  
  10.   
  11.     @Override  
  12.     public void execute(JobExecutionContext context) throws JobExecutionException {  
  13.           
  14.         Map properties = context.getMergedJobDataMap();  
  15.           
  16.         System.out.println("Hello World!");  
  17.         System.out.println("Previous Fire Time: "+context.getPreviousFireTime());//上次触发任务的时间  
  18.         System.out.println("Current Fire Time: "+context.getFireTime());//当然触发时间  
  19.         System.out.println("Next Fire Time: "+context.getNextFireTime());//下次触发时间  
  20.           
  21.         System.out.println(properties.get("message"));  
  22.         System.out.println();  
  23.     }  
  24.       
  25. }  

这个Job输出"HelloWorld",同时输出上次、本次及下次触发的时间。

 

我们看一下在applicationContext.xml中的配置:

Xml代码  收藏代码
  1. <bean id="job" class="org.springframework.scheduling.quartz.JobDetailBean">  
  2.     <property name="jobClass" value="com.springQuartz.example.HelloWorldJob"/>  
  3.     <property name="jobDataAsMap">  
  4.          <map>  
  5.             <entry key="triggerMessage" value="Job Message In JobDetail"/> <!--设置JobDetail中的值-->  
  6.          </map>  
  7.     </property>  
  8. </bean>  
  9.       
  10. <bean id="trigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
  11.     <property name="jobDetail" ref="job"/> <!--触发的job引用-->  
  12.     <property name="startDelay" value="1000"/> <!--设置延迟1秒后运行-->  
  13.     <property name="repeatInterval" value="10000"/> <!--设置每10秒触发一次-->  
  14.     <property name="jobDataAsMap">  
  15.           <map>  
  16.           <entry key="triggerMessage" value="Job Message From Trigger"/> <!--设置Trigger中的值-->  
  17.           </map>  
  18.     </property>  
  19. </bean>  
  20.   
  21. <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
  22.     <property name="triggers">  
  23.         <list>  
  24.             <ref local="trigger"/>      
  25.         </list>  
  26.     </property>  
  27. </bean>  

我们将HelloWorldJob实现成JobDetailBean类,并配置触发器simpleTriggerBean

 

最后我们的测试类:

Java代码  收藏代码
  1. package com.springQuartz.test;  
  2.   
  3. import org.springframework.beans.factory.BeanFactory;  
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  5.   
  6. public class Test {  
  7.     public static void main(String args[]){  
  8.         BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");  
  9.     }  
  10. }  

运行结果如下:

运行结果代码  收藏代码
  1. 2011-01-16 20:48:18,437 INFO - Starting Quartz Scheduler now  
  2. Hello World!  
  3. Previous Fire Time: null  
  4. Current Fire Time: Sun Jan 16 20:48:19 CST 2011  
  5. Next Fire Time: Sun Jan 16 20:48:29 CST 2011  
  6. Job Message From Trigger  
  7.   
  8. Hello World!  
  9. Previous Fire Time: Sun Jan 16 20:48:19 CST 2011  
  10. Current Fire Time: Sun Jan 16 20:48:29 CST 2011  
  11. Next Fire Time: Sun Jan 16 20:48:39 CST 2011  
  12. Job Message From Trigger  

下面说明几点:

1)首次触发是输出的Previous Fire Time为null

2)jobDataAsMap的说明:在HelloWorldJob.java中getMergedJobDataMap是JobDetail和Trigger上的JobDataMap的合并,两者数据如果冲突,则Trigger上的数据将覆盖JobDetail中的。运行结果也证明了,我们在Job中设置的值没有输出,而输出了"Job Message From Trigger"。

3)我们看到HelloWorldJob实现了Job接口,代码上依赖了Quartz的接口

 

下面我们讨论另外一种更普遍的,去除接口依赖的实现

 

主要的applicationContext.xml文件的配置

Xml代码  收藏代码
  1. <bean id="jobService" class="com.springQuartz.service.JobServiceImpl">  
  2. </bean>  
  3.       
  4. <bean id="invokeJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
  5.     <property name="targetObject">  
  6.         <ref bean="jobService" /> <!--目标Job-->  
  7.     </property>  
  8.     <property name="targetMethod">  
  9.         <value>JobServiceImpl中的特定方法</value> <!--目标方法-->  
  10.     </property>  
  11.     <property name="concurrent">  
  12.         <value>false</value> <!--设置是否同步-->  
  13.     </property>  
  14. </bean>  
  15.       
  16. <bean id="jobServiceCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
  17.     <property name="jobDetail" ref="invokeJob" />  
  18.     <property name="cronExpression" value="5/10 * * * * ?" />  
  19. </bean>  
  20.   
  21. <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
  22.     <property name="triggers">  
  23.         <list>  
  24.             <ref local="jobServiceCronTrigger"/>  
  25.         </list>  
  26.     </property>  
  27. </bean>  

 

1)首先我们配置具体的Job信息--JobServiceImpl,这个类可以不实现Quartz中的Job接口

2)最主要的MethodInvokingJobDetailFactoryBean,可以使得1)可行

3)相对于上面的例子,我们使用CronTriggerBean实现trigger,实现更灵活的时间配置

4)默认情况下,Quartz Jobs是无状态的,可能导致jobs之间互相的影响。如果你为相同的JobDetail 指定两个Trigger, 很可能当第一个job完成之前,第二个job就开始了。如果JobDetail 对象实现了Stateful 接口,就不会发生这样的事情。 第二个job将不会在第一个job完成之前开始。为了使得jobs不并发运行,设置MethodInvokingJobDetailFactoryBean 中的concurrent 标记为false 。

分享到:
评论

相关推荐

    spring+quartz demo

    【Spring + Quartz 框架整合详解】 Spring 和 Quartz 是两个在 Java 开发领域中非常重要的框架。Spring 是一个全面的、开源的应用框架,提供依赖注入(DI)、面向切面编程(AOP)以及用于简化企业级应用开发的其他...

    定时框架spring+quartz

    在ssh2_quartz这个文件中,可能包含了一个示例项目,演示了如何在SSH(Struts2、Spring、Hibernate)架构下整合Quartz进行定时任务的实现。开发者可以通过分析这个项目,学习如何配置和使用Spring+Quartz,掌握在...

    spring+quartz定时小例子

    Spring 和 Quartz 是两个在 Java 开发中非常重要的框架,它们分别用于依赖注入和任务调度。Spring 是一个全方位的 Java 应用开发框架,提供了一系列强大的功能,如 AOP(面向切面编程)、DI(依赖注入)、事务管理等...

    spring+mvc+quartz.rar

    《Spring MVC + Quartz 整合实现定时任务管理》 在现代企业级应用中,系统往往需要执行一些定时任务,如数据同步、报表生成等。Spring框架以其强大的功能和灵活的扩展性,成为Java开发的首选,而Quartz作为一款开源...

    Spring + Quartz配置实例(转载)

    标题 "Spring + Quartz配置实例(转载)" 暗示了我们将讨论如何在Java环境中整合Spring框架与Quartz作业调度库的使用。Quartz是一个开源的作业调度库,它允许开发者安排任务以在特定时间执行,而Spring框架则是一个...

    spring4+hibernate5+quartz2+hdfs整合

    "spring4+hibernate5+quartz2+hdfs整合"的主题,就是将四个关键的技术组件整合在一起,以实现高效、可扩展的数据处理和任务调度解决方案。以下是这些技术组件的核心知识点: **Spring 4** Spring 是一个开源的Java...

    spring+quartz使用jar包

    1. **Spring与Quartz的整合**:Spring 提供了对Quartz的集成支持,通过`org.springframework.scheduling.quartz`包中的类,如`SchedulerFactoryBean`和`ThreadPoolTaskExecutor`,可以轻松地将Quartz纳入Spring的...

    spring+quartz定时集群支持

    Spring整合Quartz库,使得我们可以方便地在Spring应用中创建、管理和执行定时任务。Quartz是一个开源的作业调度框架,能够安排和执行复杂的定时任务。 在集群环境下,Spring+Quartz的配置需要考虑如何处理多个...

    Spring+quartz相关jar包.rar

    在实际开发中,Spring 与 Quartz 的整合步骤通常包括以下几个部分: 1. 添加依赖:在项目中引入 Spring 和 Quartz 相关的 jar 包。这些 jar 包可能包括 spring-context、spring-context-support 和 quartz-jobs、...

    spring+mybatis+quartz

    在整合这三个技术时,通常会使用Spring的ApplicationContext来加载配置,包含MyBatis的SqlSessionFactory和Mapper接口,以及Quartz的Scheduler实例。MyBatis的配置文件中,会指定数据源、事务管理器以及Mapper文件的...

    spring+quartz 动态任务方案

    #### 一、Spring与Quartz简介及整合背景 Spring 是一款轻量级的 Java 开发框架,旨在简化企业级应用开发过程中的复杂性,提供了一套完整的解决方案,包括但不限于依赖注入、面向切面编程等功能。Quartz 则是一款...

    Spring+Quartz定时调度

    本文将深入探讨Spring与Quartz的整合,以及如何利用它们来创建和管理定时任务。 ### 一、Spring与Quartz简介 **Spring** 是一个广泛使用的开源Java应用框架,它提供了依赖注入(DI)、面向切面编程(AOP)等特性,...

    mybatis + spring + springmvc + maven + json + quartz整合jar包

    本资源集合了“mybatis + spring + springmvc + maven + json + quartz”这六大核心组件,提供了完整的整合解决方案。 1. **MyBatis**:MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。它...

    spring+quartz动态定时任务创建 +mybatis

    在Spring中整合Quartz,我们可以利用Spring的管理能力,如bean的生命周期管理和事务管理,来更方便地创建和管理定时任务。 **Spring+Quartz动态定时任务创建** 将Spring与Quartz结合,我们可以方便地在运行时动态...

    Spring任务调度配置及说明(spring+quartz)

    《Spring任务调度配置详解:Spring+Quartz的整合应用》 在Java开发中,任务调度是不可或缺的一部分,Spring框架提供了与Quartz集成的能力,使得我们可以方便地管理和执行定时任务。本文将详细介绍如何通过Spring和...

    spring boot+vue+quartz2.2.3整合定时调度系统

    spring boot+vue+quartz2.2.3整合定时调度系统持久化道mysql,sql脚本在项目里面。sql文件spring boot+vue+quartz2.2.3整合定时调度系统持久化道mysql

    spring+quartz任务调度代码版

    在Spring整合Quartz的过程中,首先需要在Spring配置文件中声明Scheduler工厂bean,然后定义Job和Trigger的bean。Spring通过`org.springframework.scheduling.quartz.SchedulerFactoryBean`来创建和管理Quartz的...

    spring+quartz定时器

    通过查看这些文件,你可以更具体地了解如何将Spring 2.0和Quartz 1.6整合在一起,以及如何编写和配置定时任务。如果你遇到任何问题或需要进一步的指导,可以参考Quartz和Spring的官方文档,或者寻求社区的帮助。

    spring+quartz+javamail定时发送邮件

    本项目“spring+quartz+javamail定时发送邮件”结合了Spring框架、Quartz调度器以及JavaMail API,构建了一个能够定时发送邮件的系统。以下将详细介绍这三个关键组件及其整合方式。 首先,Spring框架是一个广泛使用...

    Spring3.0+quartz-2.1.6

    整合Spring3.0+quartz-2.1.6 ..............................................................................

Global site tag (gtag.js) - Google Analytics