`
须等待
  • 浏览: 212793 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Quartz的使用心得

阅读更多

项目中要用到定时调度的功能,使用的是quartz,使用中遇到了一些问题,特地记下来。

一、quartz概述

quartz是一个任务定时调度的框架,支持定时的调用特定的方法,支持与Spring的整合。

二、配置步骤

quartz与Spring整合,需要一个配置文件来管理quartz中的类。

 

<?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 id="workBean" class="WorkClass">
	</bean>
	<!-- jobBean用于设定启动时运用的Bean与方法 -->
	<bean id="scheduledReportJobDetail"
		class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject">
			<ref bean="workBean" />
		</property>
		<property name="targetMethod">
			<value>work</value>
		</property>
	</bean>
	<!-- 每5秒启动一次 -->
	<bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail">
			<ref bean="scheduledReportJobDetail" />
		</property>
		<property name="cronExpression">
			<value> 0/5 * * * * ?</value>
		</property>
	</bean>
	<!-- 起动Bean -->
	<bean id="scheduler"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="trigger" />
			</list>
		</property>
	</bean>
</beans>
 

 

配置文件中配置的几个bean,依次代表,实际工作的bean、封装后用于调度的bean、配置有时间间隔的trigger触发器bean和用于启动任务的主类工厂bean。

这样,创建自己的调度就变得非常简单,我们只需要完成自己的工作方法,在xml中配置好,并制定一个时间间隔,然后启动主类就可以了。

 

public class WorkClass {
    public void work() {
        System.out.println("hello world");
    }

    public static void main(String[] args) {
        BeanFactory factory = new XmlBeanFactory(new ClassPathResource("scheduleTask.xml"));
        System.out.println(factory.getBean("scheduler"));
    }

}

 

    当然,除了和Spring整合之外,Quartz也可以单独用。

    同Spring中的工作类不一样,不用Spring的工作类需要继承Job接口。

 

public class TestWithoutSpring implements Job {

    @Override
    public void execute(JobExecutionContext arg0) throws JobExecutionException {
        System.out.println("work");
    }
}
 

    而触发器和调度者的信息则需要在调用处指定。

 

public void testWork() {
        JobDetail jobDetail = new JobDetail(); 
        jobDetail.setJobClass(TestWithoutSpring.class); 
        jobDetail.setName("asdf");
        CronTrigger trigger = new CronTrigger();
        trigger.setName("test");
        String expression = "2-3 0/1 * * * ?";
        Scheduler scheduler = null;
        
        try {
            trigger.setCronExpression(expression);
            SchedulerFactory sf = new StdSchedulerFactory(); 
            scheduler = sf.getScheduler();
            scheduler.scheduleJob(jobDetail, trigger); 
            scheduler.start(); 
        } catch (ParseException e) {
            e.printStackTrace();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
        
    }

    启动以后就和使用Spring管理是一样的效果了。 

 

三、时间间隔配置

在触发器bean中有一个重要的属性叫cronExpression,这个是代表调度频率,也就是时间间隔的,这里有特殊的格式。

quartz中的时间格式有7个元素组成,分别为秒、分、时、日、月、周几、年(可选),反应在配置中就是7(6)个由空格分隔的字符。

秒     0-59     , - * / 
分     0-59     , - * / 
小时     0-23     , - * / 
日     1-31     , - * ? / L W C 
月     1-12 or JAN-DEC     , - * / 
周几     1-7 or SUN-SAT     , - * ? / L C # 
年 (可选字段)     empty, 1970-2099     , - * /

这里常规的配置就是直接输入数字,但是quartz允许我们使用更加泛化的配置,所以提供了一些通配符。

* 表示用于替代任意数字

/表示增加幅度, 5/10表示从5开始,每10执行一次

-表示一个区间范围

? 在日和周几中出现,这里是用来明确界定,以免产生歧义

 

如cronExpression配置为 0/5 * * * * * 时会报错:Support for specifying both a day-of-week AND a day-of-month parameter is not implemented, 这就是日和周几产生了冲突, 改为 0/5 * * * * ? 就可以了,表示每5秒执行一次任务。

 

P.S quartz一开始是没有和Spring做整合的而且随着版本的迭代个中的类有一些变化, 这里就要注意quartz和Spring的版本匹配问题。

 

四、深入

Spring管理的quartz类变得很抽象,实际上,quar中有几个核心的类。

Job接口,实现了Job接口的类是任务中的实际工作类,对应于workBean

JobDetail类,包装Job,对应于scheduledReportJobDetail,利用反射在实际的调度中执行特定的方法

Trigger类,这是触发器类,用于封装调度频率时间间隔的逻辑,对应于trigger

Scheduler类,这是调度类,是封装了整个调度逻辑的最高层抽象,它持有代表任务的JobDetail类和代表调度频率的Trigger类,是调度逻辑的执行者和管理者。

 

了解了主要的类,要执行管理就很简单了,比如要控制调度的暂停或者关闭,只要通过Spring拿到对应的Scheduler类,调用其方法就可以了

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    spring+quartz实现动态设置定时任务

    5. **监控与管理**:为了更好地管理和监控定时任务,可以利用Quartz提供的JMX支持,或者使用第三方的监控工具,如Spring Boot Actuator,实时查看任务状态和执行情况。 6. **心得分享**:在实践中,要注意任务的...

    Quartz Job Scheduling Framework 中文版

    也许大多数人听说 Quartz 是在学习或使用 Spring 的时候,也就是 Spring 整合了 Quartz。而我也不例外,同样是在春天里得悉了这块石英。 当初公司一个项目中有些定时候任务,原来是用 JDK 的 TaskTimer 来实现的,...

    Springside之开发bookstore心得

    ### Springside之开发bookstore心得 #### BookStore项目概述 BookStore是一个基于Spring框架构建的典型B2C网上书店应用程序,旨在演示各种企业级应用技术。由于该项目的主要目的是技术演示而非实际商业运营,因此...

    java项目心得总结.docx

    Quartz是Java开源的调度框架,用于定时任务的执行。Middlegen是一个数据库建模工具,能自动生成Java持久层代码。Synchronizer可能是用来同步数据的工具,确保数据一致性。HSQLDB是一个轻量级的开源数据库,常用于...

    DirectShow下载安装配置心得.

    ### DirectShow下载安装配置心得 #### 一、DirectShow简介及下载 DirectShow是Microsoft Windows操作系统中的一个多媒体框架,主要用于处理音频和视频流。它基于COM(Component Object Model)技术,能够实现各种...

    总结Java部分的框架和开源项目

    Gradle是一种更先进的构建自动化工具,它允许开发者使用Groovy或Kotlin DSL编写构建脚本,具有高度可定制性和灵活性。 10. **Apache Tomcat**: Tomcat是一个开源的Servlet容器,实现了Java Servlet和JavaServer ...

    若依RuoYi框架剖析笔记,该笔记是在学习江南一点雨所录课程再结合自己的理解所写

    30、**定时任务**:使用Quartz等工具设置定时任务,自动化执行周期性任务。 31、**流程表单**:设计和实现与流程相关的业务表单,如审批表单。 32、**绘制流程图**:使用Flowable提供的工具或第三方软件绘制流程图...

    jboss books

    这个文本文件可能讲解了如何在Spring中配置和使用Quartz或Spring的TaskScheduler接口来实现定时任务,以及在JBoss环境下如何管理和调度这些任务。 3. "使用web.xml方式加载Spring.txt" - 这个文件可能详细阐述了...

    iOS游戏应用源代码——jemmons-PageCurl-v1.0-2-g2d5017a.zip

    这种效果在iOS设备上广泛应用于电子书阅读器、杂志应用和其他具有页面翻动体验的软件中,给用户带来更加生动和真实的交互感受。 源代码的核心技术在于利用了Quartz 2D图形库和Core Animation框架。Quartz 2D是苹果...

    spring-boot-example:spring boot 相关实例合集,各Demo工程介绍详见README.md

    spring-boot-example spring boot 相关实例,不断更新,欢迎点亮 Demo项目名称 含义 博客介绍 整合Apollo应用配置中心 Aop 整合阿里云Acm应用配置中心 ...关注程序员小强公众号更多编程趣事,知识心得与您分享

    SpringBoot 课程在线学习系统 毕业设计.zip

    它集成了大量常用的第三方库配置,如 JDBC、MongoDB、RabbitMQ、Quartz 等,大大减少了项目初始化时的工作量。通过“约定优于配置”的原则,Spring Boot 可以帮助开发者快速构建出高质量的应用程序。 二、在线学习...

    java最新面试宝典

    - 问题解决的过程与心得。 - 技术选型的原因。 - **面试考察要点:** - 如何全面而深入地理解项目。 - 如何应对复杂的业务需求。 通过以上总结,可以看出《Java最新面试宝典》覆盖了Java开发人员面试中可能遇到...

    AFKPageFlipper 3D翻页效果

    AFKPageFlipper的实现基于iOS的Quartz 2D和Core Animation框架,这些底层技术为实现流畅、高性能的动画提供了坚实的基础。开发者可以通过调整参数,如翻页速度、角度、阴影效果等,来定制符合项目需求的翻页样式。...

    基于Springboot的学生读书笔记共享系统源码数据库.zip

    这个系统旨在提供一个便捷、高效的平台,让学生可以分享自己的读书心得,同时也能查阅他人的笔记,促进知识的传播和学习的互助。 1. **Springboot核心概念**: - Springboot是Spring框架的扩展,旨在简化Spring...

    ios图形动画处理

    在iOS开发中,图形与动画处理是至关重要的组成部分,它们为用户提供了丰富的视觉体验和流畅的操作感受。在本文中,我们将深入探讨标题“ios图形动画处理”所涵盖的知识点,包括UIFont、UIImage、UIColor等核心绘图类...

    惊喜的-冬天雪花特效

    "惊喜的-冬天雪花特效"这个项目,显然就是一款旨在为用户带来冬季氛围的软件应用,它通过在桌面上模拟真实的雪花飘落效果,使得用户在室内也能感受到冬日的浪漫与宁静。 这个特效的实现涉及到多个技术层面。首先,...

    25、SpringBoot入门及原理(狂神)

    SpringBoot集成了众多第三方库,如数据存储(Redis、MongoDB)、消息队列(RabbitMQ)、任务调度(Quartz)等,使得开发者可以快速启动并运行应用,无需繁琐的配置。 SpringBoot的主要优点包括: 1. **快速入门**...

    开源中国源码

    用户之间相互解答,分享产品使用心得,只向用户推送自己关心的消息,扩大价值,压缩干扰。 &gt; 使用说明:请保留页面底部的 *powered by 28844. com* 感谢支持 在线地址: [28844.com](http://www.28844.com) | ...

    直角翻页效果,应该还不错

    在IT行业中,直角翻页效果是一种常见的用户体验设计,它主要应用于电子书阅读器、PDF阅读软件以及网页设计中,为用户提供类似纸质书籍翻页的视觉感受。这种效果增加了数字内容的互动性和沉浸感,使得用户在阅读电子...

Global site tag (gtag.js) - Google Analytics