Quartz是一个非常优秀的任务调度引擎,详情请见官网:[url]http://www.quartz-scheduler.org/[/url]
而Spring很好地集成了Quartz,为企业级的任务调度提供了方便。
下面先看一个实现了Job接口的任务HelloWorldJob:
- package com.springQuartz.example;
- import java.util.Map;
- import org.quartz.Job;
- import org.quartz.JobExecutionContext;
- import org.quartz.JobExecutionException;
- public class HelloWorldJob implements Job{
- @Override
- public void execute(JobExecutionContext context) throws JobExecutionException {
- Map properties = context.getMergedJobDataMap();
- System.out.println("Hello World!");
- System.out.println("Previous Fire Time: "+context.getPreviousFireTime());//上次触发任务的时间
- System.out.println("Current Fire Time: "+context.getFireTime());//当然触发时间
- System.out.println("Next Fire Time: "+context.getNextFireTime());//下次触发时间
- System.out.println(properties.get("message"));
- System.out.println();
- }
- }
这个Job输出"HelloWorld",同时输出上次、本次及下次触发的时间。
我们看一下在applicationContext.xml中的配置:
- <bean id="job" class="org.springframework.scheduling.quartz.JobDetailBean">
- <property name="jobClass" value="com.springQuartz.example.HelloWorldJob"/>
- <property name="jobDataAsMap">
- <map>
- <entry key="triggerMessage" value="Job Message In JobDetail"/> <!--设置JobDetail中的值-->
- </map>
- </property>
- </bean>
- <bean id="trigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
- <property name="jobDetail" ref="job"/> <!--触发的job引用-->
- <property name="startDelay" value="1000"/> <!--设置延迟1秒后运行-->
- <property name="repeatInterval" value="10000"/> <!--设置每10秒触发一次-->
- <property name="jobDataAsMap">
- <map>
- <entry key="triggerMessage" value="Job Message From Trigger"/> <!--设置Trigger中的值-->
- </map>
- </property>
- </bean>
- <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
- <property name="triggers">
- <list>
- <ref local="trigger"/>
- </list>
- </property>
- </bean>
我们将HelloWorldJob实现成JobDetailBean类,并配置触发器simpleTriggerBean
最后我们的测试类:
- package com.springQuartz.test;
- import org.springframework.beans.factory.BeanFactory;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- public class Test {
- public static void main(String args[]){
- BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
- }
- }
运行结果如下:
- 2011-01-16 20:48:18,437 INFO - Starting Quartz Scheduler now
- Hello World!
- Previous Fire Time: null
- Current Fire Time: Sun Jan 16 20:48:19 CST 2011
- Next Fire Time: Sun Jan 16 20:48:29 CST 2011
- Job Message From Trigger
- Hello World!
- Previous Fire Time: Sun Jan 16 20:48:19 CST 2011
- Current Fire Time: Sun Jan 16 20:48:29 CST 2011
- Next Fire Time: Sun Jan 16 20:48:39 CST 2011
- 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文件的配置
- <bean id="jobService" class="com.springQuartz.service.JobServiceImpl">
- </bean>
- <bean id="invokeJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
- <property name="targetObject">
- <ref bean="jobService" /> <!--目标Job-->
- </property>
- <property name="targetMethod">
- <value>JobServiceImpl中的特定方法</value> <!--目标方法-->
- </property>
- <property name="concurrent">
- <value>false</value> <!--设置是否同步-->
- </property>
- </bean>
- <bean id="jobServiceCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
- <property name="jobDetail" ref="invokeJob" />
- <property name="cronExpression" value="5/10 * * * * ?" />
- </bean>
- <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
- <property name="triggers">
- <list>
- <ref local="jobServiceCronTrigger"/>
- </list>
- </property>
- </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 框架整合详解】 Spring 和 Quartz 是两个在 Java 开发领域中非常重要的框架。Spring 是一个全面的、开源的应用框架,提供依赖注入(DI)、面向切面编程(AOP)以及用于简化企业级应用开发的其他...
在ssh2_quartz这个文件中,可能包含了一个示例项目,演示了如何在SSH(Struts2、Spring、Hibernate)架构下整合Quartz进行定时任务的实现。开发者可以通过分析这个项目,学习如何配置和使用Spring+Quartz,掌握在...
Spring 和 Quartz 是两个在 Java 开发中非常重要的框架,它们分别用于依赖注入和任务调度。Spring 是一个全方位的 Java 应用开发框架,提供了一系列强大的功能,如 AOP(面向切面编程)、DI(依赖注入)、事务管理等...
《Spring MVC + Quartz 整合实现定时任务管理》 在现代企业级应用中,系统往往需要执行一些定时任务,如数据同步、报表生成等。Spring框架以其强大的功能和灵活的扩展性,成为Java开发的首选,而Quartz作为一款开源...
标题 "Spring + Quartz配置实例(转载)" 暗示了我们将讨论如何在Java环境中整合Spring框架与Quartz作业调度库的使用。Quartz是一个开源的作业调度库,它允许开发者安排任务以在特定时间执行,而Spring框架则是一个...
"spring4+hibernate5+quartz2+hdfs整合"的主题,就是将四个关键的技术组件整合在一起,以实现高效、可扩展的数据处理和任务调度解决方案。以下是这些技术组件的核心知识点: **Spring 4** Spring 是一个开源的Java...
1. **Spring与Quartz的整合**:Spring 提供了对Quartz的集成支持,通过`org.springframework.scheduling.quartz`包中的类,如`SchedulerFactoryBean`和`ThreadPoolTaskExecutor`,可以轻松地将Quartz纳入Spring的...
Spring整合Quartz库,使得我们可以方便地在Spring应用中创建、管理和执行定时任务。Quartz是一个开源的作业调度框架,能够安排和执行复杂的定时任务。 在集群环境下,Spring+Quartz的配置需要考虑如何处理多个...
在实际开发中,Spring 与 Quartz 的整合步骤通常包括以下几个部分: 1. 添加依赖:在项目中引入 Spring 和 Quartz 相关的 jar 包。这些 jar 包可能包括 spring-context、spring-context-support 和 quartz-jobs、...
在整合这三个技术时,通常会使用Spring的ApplicationContext来加载配置,包含MyBatis的SqlSessionFactory和Mapper接口,以及Quartz的Scheduler实例。MyBatis的配置文件中,会指定数据源、事务管理器以及Mapper文件的...
#### 一、Spring与Quartz简介及整合背景 Spring 是一款轻量级的 Java 开发框架,旨在简化企业级应用开发过程中的复杂性,提供了一套完整的解决方案,包括但不限于依赖注入、面向切面编程等功能。Quartz 则是一款...
本文将深入探讨Spring与Quartz的整合,以及如何利用它们来创建和管理定时任务。 ### 一、Spring与Quartz简介 **Spring** 是一个广泛使用的开源Java应用框架,它提供了依赖注入(DI)、面向切面编程(AOP)等特性,...
本资源集合了“mybatis + spring + springmvc + maven + json + quartz”这六大核心组件,提供了完整的整合解决方案。 1. **MyBatis**:MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。它...
在Spring中整合Quartz,我们可以利用Spring的管理能力,如bean的生命周期管理和事务管理,来更方便地创建和管理定时任务。 **Spring+Quartz动态定时任务创建** 将Spring与Quartz结合,我们可以方便地在运行时动态...
《Spring任务调度配置详解:Spring+Quartz的整合应用》 在Java开发中,任务调度是不可或缺的一部分,Spring框架提供了与Quartz集成的能力,使得我们可以方便地管理和执行定时任务。本文将详细介绍如何通过Spring和...
spring boot+vue+quartz2.2.3整合定时调度系统持久化道mysql,sql脚本在项目里面。sql文件spring boot+vue+quartz2.2.3整合定时调度系统持久化道mysql
在Spring整合Quartz的过程中,首先需要在Spring配置文件中声明Scheduler工厂bean,然后定义Job和Trigger的bean。Spring通过`org.springframework.scheduling.quartz.SchedulerFactoryBean`来创建和管理Quartz的...
通过查看这些文件,你可以更具体地了解如何将Spring 2.0和Quartz 1.6整合在一起,以及如何编写和配置定时任务。如果你遇到任何问题或需要进一步的指导,可以参考Quartz和Spring的官方文档,或者寻求社区的帮助。
本项目“spring+quartz+javamail定时发送邮件”结合了Spring框架、Quartz调度器以及JavaMail API,构建了一个能够定时发送邮件的系统。以下将详细介绍这三个关键组件及其整合方式。 首先,Spring框架是一个广泛使用...
整合Spring3.0+quartz-2.1.6 ..............................................................................