`
abcde5342376
  • 浏览: 34603 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring定时器之翘楚-Quartz

阅读更多
Quartz是一个企业级的定时任务执行工具,使用起来也相当容易。但是也有点约束----每个作业必须实现Job接口。
Spring早在1.0就对Quartz提供了支持。Spring AOP的强大功能可以将这个无聊的事情见鬼去吧。我们甚至可以将任何一个普通类的方法设定为定时执行的方法。并且在Spring初始化的自动启动定时器(不需要你去写Main方法),在Spring关闭的时候结束定时器的运行,一避免应用服务器都关闭了,定时器还在后台默默无闻“空转”。呵呵,下面就看个例子吧:

目标:将一个普通的业务方法作为定时作业的方法通过Spring配置去执行。

要开始使用 Quartz,需要用 Quartz API 对项目进行配置。步骤如下:

  1. 从 OpenSymphony 下载 Quartz API
  2. 解压缩并把 quartz-x.x.x.jar 放在项目文件夹内,或者把文件放在项目的类路径中。
  3. 把 core 和/或 optional 文件夹中的 jar 文件放在项目的文件夹或项目的类路径中。
  4. 如果使用 JDBCJobStore,把所有的 JDBC jar 文件放在项目的文件夹或项目的类路径中。
代码:
第一步:写业务方法
package stu.quartz;

/**
* 业务方法
*
* @author leizhimin,2008-10-8 15:41:52
*/

public class TestService {
public void doSomething() {
System.out.println("Do Something Freely!");
}

public void justDoIt() {
System.out.println("Just Do It!");
}
}
二、配置Spring

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 普通的业务Bean -->
<bean name="testService" class="com.ptn.cdma.task.TestService"/>

<!-- 作业 -->
<bean id="jobDetail_test1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="testService"/>
<property name="targetMethod" value="justDoIt"/>
</bean>
<!-- 作业 -->
<bean id="jobDetail_test2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="testService"/>
<property name="targetMethod" value="doSomething"/>
</bean>
<!-- 触发器 方式一 :-->
<bean name="testTrigger1" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="jobDetail_test1"/>
<property name="startDelay" value="10"/>
<property name="repeatInterval" value="2000"/>
<property name="repeatCount" value="100"/>
<property name="jobDataAsMap">
<map>
<entry key="count" value="10"/>
</map>
</property>
</bean>
<!-- 触发器 方式二 :和linux下的cron方式差不多-->
<bean name="testTrigger2" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetail_test2"/>
<property name="cronExpression" value="*/1 * * * * ?"/>
</bean>
<!-- 计划 -->
<bean name="testScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="testTrigger1"/>

</list>
</property>
<property name="schedulerContextAsMap">
<map>
<entry key="timeout" value="30"/>
</map>
</property>

<!-- Quartz的高级配置-->
<!--<property name="configLocation" value="classpath:com/lavasoft/quartz.properties"/>-->
</bean>
</beans>

三、写测试
package stu.quartz;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
* 测试类
*
* @author leizhimin,2008-10-8 16:33:21
*/

public class TestQuartz {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("/Application_quartz.xml");
System.out.println("Main方法执行开始了! 定时器伴随着Spring的初始化执行了。。。");

System.out.println("Main方法执行结束了!");
}
}
四.在Web.xml中申明

Spring framework实现定时器之Quartz (转载) - Fiona - Fiona的博客Spring framework实现定时器之Quartz (转载) - Fiona - Fiona的博客Code

Spring framework实现定时器之Quartz (转载) - Fiona - Fiona的博客

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/schedulingContext-quartz.xml</param-value>

</context-param>

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

五运行测试:
Main方法执行开始了! 定时器伴随着Spring的初始化执行了。。。
Main方法执行结束了!
Just Do It!
Just Do It!
Just Do It!
Just Do It!
Just Do It!
......
运行结果表名:在Spring初始化后,定时器根据延迟时间启动执行,并且在执行过过程中,Main线程一直没有退出。定时器线程一直在执行。
在强行终止Main线程的时候,定时器也停止执行。
关于cron表达式(来自网络):

Cron 表达式包括以下 7 个字段:

  • 小时
  • 月内日期
  • 周内日期
  • 年(可选字段)

Cron 触发器利用一系列特殊字符,如下所示:

  • 反斜线(/)字符表示增量值。例如,在秒字段中“5/15”代表从第 5 秒开始,每 15 秒一次。
  • 问号(?)字符和字母 L 字符只有在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值。所以,如果指定月内日期,可以在周内日期字段中插入“?”,表示周内日期值无关紧要。字母 L 字符是 last 的缩写。放在月内日期字段中,表示安排在当月最后一天执行。在周内日期字段中,如果“L”单独存在,就等于“7”,否则代表当月内周内日期的最后一个实例。所以“0L”表示安排在当月的最后一个星期日执行。
  • 在月内日期字段中的字母(W)字符把执行安排在最靠近指定值的工作日。把“1W”放在月内日期字段中,表示把执行安排在当月的第一个工作日内。
  • 井号(#)字符为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。
  • 星号(*)字符是通配字符,表示该字段可以接受任何可能的值。

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

秒 0-59 , - * /

分 0-59 , - * /

小时 0-23 , - * /

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

月份 1-12 或者 JAN-DEC , - * /

星期 1-7 或者 SUN-SAT , - * ? / L C #

年(可选) 留空, 1970-2099 , - * /

表达式意义

"0 0 12 * * ?" 每天中午12点触发

"0 15 10 ? * *" 每天上午10:15触发

"0 15 10 * * ?" 每天上午10:15触发

"0 15 10 * * ? *" 每天上午10:15触发

"0 15 10 * * ? 2005" 2005年的每天上午10:15触发

"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发

"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发

"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发

"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发

"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发

"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发

"0 15 10 15 * ?" 每月15日上午10:15触发

"0 15 10 L * ?" 每月最后一日的上午10:15触发

"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发

"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发

"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发

每天早上6点

0 6 * * *

每两个小时

0 */2 * * *

晚上11点到早上8点之间每两个小时,早上八点

0 23-7/2,8 * * *

每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

0 11 4 * 1-3

1月1日早上4点

0 4 1 1 *

更多知识:

http://www.ibm.com/developerworks/cn/java/j-quartz/index.html

http://www.iteye.com/topic/117244

分享到:
评论

相关推荐

    Spring中的Quartz配置-Spring-定时器-java定时器.doc

    Spring 中的 Quartz 配置-Spring 定时器-java 定时器 在 Spring 框架中,Quartz 是一个非常流行的开源作业调度器,可以实现任务的定时执行。在本篇文章中,我们将讨论如何在 Spring 中配置 Quartz,以实现 Java ...

    spring-boot-quartz-demo, 使用Quartz框架的样例 Spring Boot 应用程序.zip

    spring-boot-quartz-demo, 使用Quartz框架的样例 Spring Boot 应用程序 spring-boot-quartz-demo使用Quartz框架的样例 Spring Boot 应用程序基于 https://gist.github.com/jelies/5085593 附加功能( 断点,失火处理...

    spring-boot-starter-quartz:Quartz-Scheduler的Spring-Boot自动配置

    Quartz Scheduler的Spring-Boot自动配置只是Quartz Scheduler的Spring-Boot启动器。 当然,Quartz Scheduler已经有好几个启动器,但是它们都不能满足我的所有需求,因此我创建了自己的启动器。 这只是一个业余项目。...

    spring-boot-Quartz-1.zip

    implementation 'org.springframework.boot:spring-boot-starter-quartz' ``` 接下来,创建一个Quartz作业类(Job)并实现`org.quartz.Job`接口。这个类将定义实际要执行的任务。例如: ```java import org.quartz...

    spring-boot-starter-quartz-2.1.6.RELEASE.jar

    java运行依赖jar包

    quartz和spring-quartz

    Quartz和Spring-Quartz是两个在Java世界...“spring-quartz-demo”可能是一个完整的示例项目,你可以通过运行它来深入理解Quartz在Spring中的应用。通过研究这些资源,你可以更全面地掌握Quartz和Spring-Quartz的用法。

    spring-context-support-5.3.15-API文档-中英对照版.zip

    赠送jar包:spring-context-support-5.3.15.jar; 赠送原API文档:spring-context-support-5.3.15-javadoc.jar; 赠送源代码:spring-context-support-5.3.15-sources.jar; 赠送Maven依赖信息文件:spring-context-...

    Spring-quartz实现定时器(含代码)

    &lt;groupId&gt;org.quartz-scheduler &lt;artifactId&gt;quartz &lt;version&gt;2.x.x.RELEASE ``` 2. **配置Quartz**:在Spring的配置文件(如`applicationContext.xml`)中,配置Quartz的SchedulerFactoryBean,设置数据源和...

    spring定时器-quartz开发的步骤

    &lt;groupId&gt;org.quartz-scheduler &lt;artifactId&gt;quartz &lt;version&gt;2.3.2 &lt;groupId&gt;org.springframework &lt;artifactId&gt;spring-context-support &lt;version&gt;5.3.22 ``` 2. **配置Quartz**: 在Spring的配置...

    Spring定时器quartz

    Spring定时器Quartz是Java应用中广泛使用的任务调度框架,它允许开发者定义并执行复杂的定时任务。这篇博客可能探讨了如何在Spring框架中集成Quartz,以实现灵活、可扩展的任务调度。 Quartz是一个开源的作业调度...

    spring-context-support-4.2.2和quartz-2.2.3所需Jar包

    标题中的"spring-context-support-4.2.2和quartz-2.2.3所需Jar包"涉及到两个关键的Java库:Spring Context Support 4.2.2版本和Quartz Scheduler 2.2.3版本。这两个库在企业级Java应用开发中扮演着重要角色,特别是...

    Spring的定时调度--Quartz

    1. **依赖引入**:在Spring项目中,首先需要在pom.xml或build.gradle文件中添加Quartz和Spring的 quartz-spring 依赖。 2. **配置Quartz**:创建quartz.properties文件,配置Quartz的工作环境,如数据库连接、...

    spring-boot-quartz

    当我们结合 Spring Boot 和 Quartz,我们可以构建一个强大的定时任务管理系统,这在许多业务场景中非常有用,比如数据清理、报告生成、定期发送邮件等。 首先,让我们深入理解一下Spring Boot如何与Quartz集成。在...

    common-quartz.zip

    &lt;groupId&gt;org.quartz-scheduler &lt;artifactId&gt;quartz &lt;version&gt;your-quartz-version &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-jdbc ``` 接下来,你需要配置Quartz。在SpringBoot...

    spring java 定时器 执行两次 quartz

    在Spring应用中添加Quartz支持,你需要在`pom.xml`或`build.gradle`文件中引入Quartz的依赖,比如`quartz-all.jar`。接着,在Spring的配置文件(如`applicationContext.xml`)中,定义一个`SchedulerFactoryBean`来...

    Spring-quartz-demo Spring4.1.6 + quartz2.2.1

    本项目来源与网络,本人对项目...直接通过mvn 倒入项目,在Spring-quartz-demo\src\main\webapp\sql 有sql 建立数据库,表 启动tomcat 直接访问http://localhost:8080/Spring-quartz-demo/task/taskList.htm 就可以使用

    springboot2.3集成quartz定时任务持久化数据库,支持集群

    在本文中,我们将深入探讨如何在Spring Boot 2.3版本中集成Quartz定时任务,并实现其持久化到数据库,以便支持集群环境。这个过程的关键在于配置Quartz Scheduler,设置数据库连接,以及确保任务在多节点环境中能够...

    spring整合quartz动态定时任务demo-spring-quartz-demo.zip

    这个"spring-quartz-demo"项目就是一个很好的示例,它展示了如何在Spring中整合Quartz以实现动态定时任务。 首先,我们要了解Spring和Quartz的基本概念。Spring是一个全面的Java企业级应用开发框架,它提供了依赖...

    spring定时器(内含TimerTask实现和Quartz实现两种方式)

    &lt;groupId&gt;org.quartz-scheduler &lt;artifactId&gt;quartz &lt;version&gt;2.3.2 &lt;groupId&gt;org.springframework &lt;artifactId&gt;spring-context-support &lt;version&gt;5.3.18 @Configuration @EnableScheduling public class ...

Global site tag (gtag.js) - Google Analytics