`

Java定时任务框架Quartz

阅读更多

引自:

http://yangpanwww.iteye.com/blog/797563

http://www.cnblogs.com/obullxl/archive/2011/07/10/spring-quartz-cron-integration.html

http://lgscofield.iteye.com/blog/1593036

http://my.oschina.net/Barudisshu/blog/294272

 

Quartz和Spring集成

Spring 的scheduling.quartz包中对Quartz框架进行了封装,使得开发时不用写任何QuartSpring的代码就可以实现定时任务。 Spring通过JobDetailBean,MethodInvokingJobDetailFactoryBean实现Job的定义。后者更加实用, 只需指定要运行的类,和该类中要运行的方法即可,Spring将自动生成符合Quartz要求的JobDetail。

构建依赖项
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<!--添加Spring框架-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>${spring.version}</version>
</dependency>
 
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.1.1</version>
</dependency>
创建任务类

这里的任务类不需要实现Job接口,并且注意任务的方法不能带参数,否则Spring会报错找不到该方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import ***;
 
/**
 * @author Barudisshu
 */
public class HelloWorld{
 
    private static Logger logger = Logger.getLogger(HelloWorld.class);
 
    public HelloWorld() {
    }
 
    /**
     * spring 检测要求不带参数
     */
    public void execute() {
        logger.info("-----------------------------------------" +
                "\n\nKick your ass and fuck your mother! \n\n" +
                "-----------------------------------------" +
                new Date());
    }
}

Spring的applicationContext.xml配置文件修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!--要调用的工作类-->
<bean id="quartzJob" class="net.individuals.quartz.HelloWorld"/>
 
<!--定义调用对象和调用对象的方法-->
<bean id="jobtask"
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <!--调用类-->
    <property name="targetObject" ref="quartzJob"/>
    <!--调用方法-->
    <property name="targetMethod" value="execute"/>
 
</bean>
<!--定义触发时间-->
<bean id="doTime"
    class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="jobtask"/>
    <!--cron表达式-->
    <property name="cronExpression" value="0/5 * * * * ?"/>
</bean>
<!--总管理类-->
<bean id="startQuartz"
    lazy-init="false"
    autowire="no"
    class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <!--任务列表-->
        <list>
            <ref bean="doTime"/>
        </list>
    </property>
</bean>

这里Bean的注入方式因个人喜好,也可以自动注入,另外web.xml的配置这里也不在赘言,请自行Spring文档。

 

注意,如果运行期间出错,可能是Spring的版本或者某些包冲突,我这里的Spring版本为3.2.4、Quartz为2.1.1 。

 

quartz 时间配置规则 
格式: [秒] [分] [小时] [日] [月] [周] [年] 

序号 说明 
是否必填 允许填写的值 允许的通配符 
1 秒 是 0-59   , - * / 
2 分 是 0-59 
  , - * / 
3 小时 是 0-23   , - * / 
4 日 是 1-31   , - * ? / L W 
5 月 是 1-12 or JAN-DEC   , - * / 
6 周 是 1-7 or SUN-SAT   , - * ? / L # 
7 年 否 empty 或 1970-2099 , - * / 
通配符说明: 
* 表示所有值. 例如:在分的字段上设置 "*",表示每一分钟都会触发。 
? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为"?" 具体设置为 0 0 0 10 * ? 
- 表示区间。例如 在小时上设置 "10-12",表示 10,11,12点都会触发。 
, 表示指定多个值,例如在周字段上设置 "MON,WED,FRI" 表示周一,周三和周五触发 
/ 用于递增触发。如在秒上面设置"5/15" 表示从5秒开始,每增15秒触发(5,20,35,50)。在月字段上设置'1/3'所示每月1号开始,每隔三天触发一次。 
L 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于"7"或"SAT"。如果在"L"前加上数字,则表示该数据的最后一个。例如在周字段上设置"6L"这样的格式,则表示“本月最后一个星期五" 
W 表示离指定日期的最近那个工作日(周一至周五). 例如在日字段上设置"15W",表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式为 "1W",它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,"W"前只能设置具体的数字,不允许区间"-"). 
小提示 
'L'和 'W'可以一组合使用。如果在日字段上设置"LW",则表示在本月的最后一个工作日触发(一般指发工资 ) 

# 序号(表示每月的第几个周几),例如在周字段上设置"6#3"表示在每月的第三个周六.注意如果指定"#5",正好第五周没有周六,则不会触发该配置(用在母亲节和父亲节再合适不过了) 
小提示 
周字段的设置,若使用英文字母是不区分大小写的 MON 与mon相同. 
       
常用示例: 

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分每分触发 
0 0/5 14 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发) 
0 0/5 14,18 * * ? 

 

分享到:
评论

相关推荐

    Quartz定时任务框架

    在给定的压缩包文件中,"lib"目录可能包含了Quartz库的jar文件,这是运行Quartz任务所必需的依赖。为了运行上述代码,你需要确保项目中已经引入了Quartz库,或者将lib目录下的jar文件添加到项目的类路径中。 总之,...

    Quartz--JAVA定时任务\Java应用:Java调度任务和Spring Quartz (1)

    Java定时任务是应用程序中不可或缺的一部分,它允许程序在特定时间执行特定操作,无需用户干预。...相比`java.util.Timer`,Quartz提供了更丰富的功能和更强的灵活性,是Java定时任务的首选解决方案。

    Spring 框架自带定时任务和Quartz定时任务

    在这两种方式中,Spring框架提供了自己的定时任务工具Spring Task,以及与专业定时任务框架Quartz集成的能力。 首先,对于Java自带的定时任务实现,我们可以使用java.util.Timer和java.util.TimerTask类。Timer类...

    java定时任务quartz的基本实现

    Quartz提供的灵活性和强大功能使其成为Java定时任务的理想选择。通过理解上述基本概念和操作,你可以创建复杂的定时任务方案,以满足项目中的各种需求。在实际项目中,还可以结合Spring框架的集成,使Quartz的使用...

    java quartz 定时任务

    - Quartz 是一个完全由Java编写的开源作业调度框架,它可以在Java应用中用于执行定时任务。Quartz 支持集群环境,可以在多台服务器上分布式运行,以提高系统的可用性和可靠性。 2. **定时任务**: - 定时任务是在...

    定时任务框架Quartz Demo

    Quartz是一款开源的Java定时任务框架,用于在Java应用程序中创建和管理定时任务。它提供了丰富的API和功能,使得开发者可以灵活地定义和调度任务,实现应用中的周期性任务执行。在"定时任务框架Quartz Demo"项目中,...

    quartz.rar_java 定时任务_quartz

    Quartz 是一个强大的开源 Java 定时...总结来说,Quartz是一个强大且灵活的Java定时任务库,提供了丰富的特性来满足各种调度需求。通过下载并研究提供的压缩包,开发者可以深入理解并有效地在自己的项目中应用Quartz。

    定时任务quartz实现分组串行并行动态配置

    Quartz是一款广泛使用的开源作业调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在实际应用中,我们可能需要根据业务需求动态地配置定时任务的执行方式,例如,某些任务可能需要串行执行,而其他任务则...

    quartz动态添加、修改和删除定时任务

    Quartz是一款开源的作业调度框架,它允许开发者创建、安排和管理定时任务。在Java应用程序中,Quartz常被用来实现后台任务的自动化执行,比如数据同步、日志清理、发送邮件等。本教程将详细介绍如何动态地在Quartz中...

    轻量级定时任务框架.zip

    本框架以ZIP压缩包的形式提供,名为"轻量级定时任务框架.zip",其中包含的核心组件是Quartz,这是一个广为使用的开源作业调度库,能够与Java应用程序无缝集成,实现灵活的定时任务调度。 Quartz框架的基本概念包括...

    Java任务调度框架Quartz教程实例

    ### Java任务调度框架Quartz教程实例 #### 一、Quartz框架简介 Quartz是一个功能齐全、开源的任务调度服务框架,它可以被集成到几乎所有类型的Java应用程序中,无论是小型的独立应用还是大型的企业级系统,甚至是...

    Java分布式Elastic-Job和Quartz定时任务课程(1.6G)

    4_主流定时任务框架优缺点和什么是分布式定时任务.mp4 5_环境搭建总体流程.mp4 6_前期准备-JDK.mp4 7_前期准备-Maven.mp4 8_前期准备-MySQL.mp4 9_前期准备-Zookeeper.mp4 10_知识点检测与小结.mp4 11_Elastic-Job...

    java 定时任务管理框架

    Java定时任务管理框架是开发中常见的一种工具,用于在特定时间执行特定任务,极大地提高了工作效率。Citic Scheduler作为这样一个框架,旨在简化Java项目中的定时任务管理。它提供了一个直观的用户界面,允许开发者...

    java定时执行多任务和quartz定时执行多任务

    Java定时执行多任务是软件开发中的常见需求,用于在特定时间点或按固定频率执行某项操作,例如数据同步、日志清理等。Java提供了一些内置的定时工具,如`java.util.Timer`和`java.util.concurrent....

    java定时任务的实现方式

    本文将详细介绍两种常用的Java定时任务实现方式:Timer类和Spring框架的Quartz调度器。 首先,第一种方式是使用Java内置的`Timer`类。`Timer`类提供了定时任务调度的功能,可以按照预设的时间间隔执行任务。在提供...

    quartz定时任务框架

    quartz定时任务框架 quartz定时任务框架是OpenSymphony开源组织在Job scheduling领域又一个开源项目,可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个...

    Spring+Quartz 从数据库中获取定时任务和定时时间,动态实现对定时任务的增删改查

    Spring框架结合Quartz库,提供了一种强大而灵活的方式来管理这些定时任务。本项目旨在演示如何利用Spring和Quartz从数据库中动态加载定时任务,并实现对它们的增删改查功能。以下是关于这个主题的详细知识讲解。 ...

    定时任务完整案例 Java quartz

    【标题】"定时任务完整案例 Java quartz" 涉及的核心技术是Java的调度库Quartz,它是一个开源的工作调度框架,广泛应用于企业级应用中,用于执行定时任务。Quartz能够帮助开发者创建、调度和执行任务,实现高度灵活...

    Java使用quartz实现任务调度定时任务

    在Java世界里,Quartz是一个强大的、完全开源的作业调度框架,广泛用于构建复杂的时间触发任务。本篇文章将深入探讨如何使用Quartz在Java应用程序中实现任务调度。 Quartz库提供了一个灵活的API,可以创建、调度和...

    java动态管理定时任务

    Spring框架与Quartz库的整合提供了强大的动态管理定时任务的能力。下面我们将深入探讨这个主题。 Spring框架是Java开发中的核心组件,它提供了一个全面的编程和配置模型,使得开发过程更加简洁高效。Spring通过其...

Global site tag (gtag.js) - Google Analytics