首先认识明确几个关于Quartz Scheduler的概念。
调度器:负责对用户定义的所有任务进行调度的类。
触发器:触发器在逻辑上包含两个属性,即如何触发该调度器和触发该调度器之后进行怎么样的操作,在Quartz Scheduler中触发器的触发事件为特定时间。时间可以为一个时间段,也可以为时间点。
任务(jobDetail):触发器在被触发后进行的操作,可以指定任意一个类的某个方法。触发器被触发之后将调用该类的指定方法。
在spring.jar包中包含了对Quartz Scheduler进行操作的类:
1. org.springframework.scheduling.quartz.SchedulerFactoryBean
该类负责在spring容器中创建调度器。其最重要的属性有triggers,这是一个List定义了该调度器负责调度的所有触发器。还有一个属性为autoStartup,该类指定是否在spring构造该类完成之后开始执行调度。一般设置为true。
2. org.springframework.scheduling.quartz.CronTriggerBean
该类负责在spring容器中创建一个触发器,该类的ID应该在某个SchedulerFactoryBean属性的List中被引用,这样这个触发器才能保证被某个指定调度器调度。在该类中应该指定两个属性,触发规则(cronExpression)和触发要执行任务(jobDetail)。触发规则(cronExpression)是一个指定规则的字符串,指定了在什么时候触发该触发器。在下文中介绍,jobDetail属性配置为一个MethodInvokingJobDetailFactoryBean,由MethodInvokingJobDetailFactoryBean负责生成任务类。
3. org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
该类负责生成具体的任务,其实任务非常简单,只需要指定某个对象的某个方法即可,在触发器触发时,即调用指定对象的指定方法。
代码示例
spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- 任务调度器生成器,Spring生成具有指定属性调度器对象 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!-- 生成的调度器所管理的所有触发器 -->
<property name="triggers">
<list>
<ref bean="testTrigger" />
</list>
</property>
<property name="autoStartup" value="true" />
</bean>
<!-- 触发器生成器类,用被指定的调度器调度生成指定规则的触发器对象 -->
<bean id="testTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<!-- 触发后要做的操作,这个操作由spring管理,只需要指定一个MethodInvokingJobDetailFactoryBean -->
<property name="jobDetail" ref="testJobDetail" />
<!-- 触发规则,这里的触发规则是每隔2秒钟后触发一次 -->
<property name="cronExpression" value="*/2 * * * * ?" /><!-- -->
</bean>
<!--任务生成器,由spring管理,只需要指定其对应的对象和方法即可,任务的执行即是某个对象调用一个方法 -->
<bean id="testJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 指定该任务对应的调用对象,这个对象所属的类无需实现任何接口-->
<property name="targetObject" ref="testJob" />
<!-- 指定在targetObject对象中某个的方法 -->
<property name="targetMethod" value="execute" />
<!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 -->
<property name="concurrent" value="false" />
</bean>
<!-- 一个普通的类,用于测试 -->
<bean id="testJob" class="com.javacat.spring.TestJob"/>
</beans>
|
用于测试的类:
package com.javacat.spring;
import java.util.Date;
public class TestJob {
private static int count = 0;
public void execute() {
try {
Thread.sleep(3000);
System.out.println(new Date() + "--任务I第"+ ++count +"次被触发");
} catch (Exception ex) {
ex.printStackTrace();
}
}
|
下面介绍如何在spring中定义触发器的生成规则:
生成规则cronExpression属性是一个空格隔开的字符串,每个部分分别标识指定的时间的秒,分,时,日,月,周几,年属性。先看一个表格
字段名
|
允许的值
|
允许的特殊字符
|
秒
|
0-59
|
- * /
|
分
|
0-59
|
- * /
|
时
|
0-23
|
- * /
|
日
|
1-31
|
- * / L W C ?
|
月
|
1-12 or JAN-DEC
|
- * /
|
周几
|
1-7(1对应星期天)or SUN-SAT
|
- * ? / L C #
|
年(可选字段)
|
1970-2099 empty
|
- * /
|
字符释义
“?”字符:表示不确定的值
“,”字符:指定数个值
“-”字符:指定一个值的范围
“/”字符:指定一个值的增加幅度。n/m表示从n开始,每次增加m
“L”字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X
“W”字符:指定离给定日期最近的工作日(周一到周五)
“#”字符:表示该月第几个周X。6#3表示该月第3个周五
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 * * ?
分享到:
相关推荐
在Java Spring中整合Quartz,可以利用Spring的管理能力来控制Quartz的作业和触发器,使得整个系统更加灵活和易于维护。以下将详细介绍如何进行Spring与Quartz的整合。 1. **集成步骤** - 添加依赖:首先,确保在...
通过这个 "spring+quartz demo",开发者可以快速理解并实践 Spring 和 Quartz 的整合,掌握如何在 Spring 应用中高效地管理和执行定时任务。这个示例项目提供了直接运行的代码,有助于加深对这些概念的理解。
首先,要整合Spring和Quartz,我们需要在Spring的配置文件(如`applicationContext.xml`)中引入Quartz的相关配置。这通常包括以下步骤: 1. 引入Quartz的Bean定义,例如`SchedulerFactoryBean`,它负责创建和管理...
3. **整合过程**:整合 Spring 2 和 Quartz 需要在 Spring 配置文件中声明 Job 和 Trigger 的 Bean,并指定它们的关联。Spring 可以通过其自身的 JobFactory 来创建 Job 实例,使得 Job 可以利用 Spring 的 DI 功能...
本示例将探讨如何将 Spring 3 与 Quartz 1.8 和 2.2 版本进行整合,以实现高效的任务调度。 首先,我们来看 Spring 3 整合 Quartz 1.8 的步骤: 1. **引入依赖**:在项目中添加 Quartz 和 Spring 相关的库,确保...
Spring框架作为Java领域广泛使用的轻量级框架,提供了与第三方库Quartz的整合,使得开发者能够轻松地在Spring应用中实现复杂的定时任务调度。Quartz是一款开源的作业调度框架,支持丰富的调度策略,可以满足各种定时...
整合 Spring 和 Quartz 可以充分利用 Spring 的优点,如通过 Spring 的配置来管理和实例化 Job,以及利用 Spring 的事务管理功能。这样,我们可以将任务调度与业务逻辑解耦,使代码更加模块化和易于维护。 在整合...
1. **Spring与Quartz的整合**:Spring 提供了对Quartz的集成支持,通过`org.springframework.scheduling.quartz`包中的类,如`SchedulerFactoryBean`和`ThreadPoolTaskExecutor`,可以轻松地将Quartz纳入Spring的...
Spring 整合 Quartz 是一种常见的任务调度解决方案,用于在应用程序中安排和执行周期性的任务。Quartz 是一个功能丰富的开源任务调度库,适用于 Java 平台,尤其适用于 J2EE 和 J2SE 应用。它允许开发人员精确地定义...
在Spring的配置文件(如applicationContext.xml)中,我们需要配置一个`SchedulerFactoryBean`,这是Spring提供的用于创建和管理Quartz Scheduler的Bean。配置如下: ```xml ...
Spring整合Quartz 2.2.3是Java开发者在实现定时任务时常用的一种技术组合。Quartz是一款开源的作业调度框架,它...通过深入理解Quartz的工作原理和Spring的整合机制,开发者可以更好地控制和扩展应用的定时任务功能。
在Spring配置文件(如`applicationContext.xml`)中,定义`SchedulerFactoryBean`来实例化和配置Quartz Scheduler: ```xml <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz....
通过Spring的XML配置或Java配置,我们可以声明式地定义Job(任务)和Trigger(触发器),并将它们与Quartz Scheduler关联。 1. **配置Spring与Quartz** 在Spring的配置文件中,我们首先需要定义一个`...
2. 配置 Scheduler:在 Spring 配置文件中,设置 Quartz 的 SchedulerFactoryBean,指定数据库存储(如果需要持久化任务信息)和相关的配置属性。 3. 定义 Job 和 Trigger:创建 Quartz 作业类(Job),实现 org....
在Spring中,我们可以使用`org.springframework.scheduling.quartz.SchedulerFactoryBean`来创建和配置Scheduler。 集成Spring与Quartz的步骤主要包括以下几点: 1. **引入依赖**:在项目中添加Quartz和Spring相关...
**一、Quartz和Spring整合** 1. **依赖库** - **邮件发送**:为了发送邮件,我们需要`commons-email-1.2.jar`和`mail.jar`。`commons-email`提供了简单的邮件API,而`mail.jar`包含了JavaMail API,用于处理邮件...
Spring整合Quartz是一款常见的任务调度解决方案,它允许开发者在应用程序中安排定时任务的执行。Quartz是一个开源的作业调度框架,而Spring通过提供一个简洁的API使得与Quartz的集成变得简单。以下是对Spring整合...
在 Spring 的配置文件(如 `applicationContext.xml`)中,声明 Quartz 的 JobStore(用于存储任务和触发器信息),ThreadPool(用于执行任务的线程池)以及 SchedulerFactoryBean(Spring 对 Quartz Scheduler 的...
在Spring Boot应用中整合Quartz定时任务是一种常见的需求,它可以帮助我们执行周期性的后台任务,如数据同步、报表生成等。Spring Boot与Quartz的结合提供了便捷的配置方式,特别是通过YAML(YAML Ain't Markup ...