Quartz介绍

Quartz是Job scheduling(作业调度)领域的一个开源项目,Quartz既可以单独使用也可以跟spring框
架整合使用,在实际开发中一般会使用后者。使用Quartz可以开发一个或者多个定时任务,每个定时任
务可以单独指定执行的时间,例如每隔1小时执行一次、每个月第一天上午10点执行一次、每个月最后
一天下午5点执行一次等。
官网:http://www.quartz-scheduler.org/

简单使用(使用步奏与解释在代码注释中)

搭建maven工程

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.fs</groupId><artifactId>QuartzDemo</artifactId><version>1.0-SNAPSHOT</version><dependencies>
<!--        spring--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.9.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>5.0.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.1.9.RELEASE</version></dependency>
<!--        quartz 定时器--><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.1</version></dependency><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz-jobs</artifactId><version>2.2.1</version></dependency></dependencies>
</project>

applicationContext-jobs.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!--    把自定义的定时任务类(这个类是个普通类,里面需要自己编写定时执行的方法)springIOC管理--><bean id="quartzHelloWorld" class="com.fs.regularwork.QuartzHelloWorld"></bean>
<!--    设置第二个定时类--><bean id="quartzHelloWorld02" class="com.fs.regularwork.QuartzHelloWorld02"></bean><!--    将方法调用作业详细信息工厂Bean交给ioc管理--><bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!--        注入自定义的定时任务类的对象--><property name="targetObject" ref="quartzHelloWorld"/>
<!--        注入自定义调用对象的具体执行的方法--><property name="targetMethod" value="quartzTest"/></bean><!--    将方法调用作业详细信息工厂Bean交给ioc管理--><bean id="jobDetail02" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><!--        注入自定义的定时任务类的对象--><property name="targetObject" ref="quartzHelloWorld02"/><!--        注入自定义调用对象的具体执行的方法--><property name="targetMethod" value="quartzTest02"/></bean><!--    注册一个触发器,指定任务触发时间,触发上面指定的方法--><bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!--        注入jobDetail,通过反射来调用我们上面自定义的方法--><property name="jobDetail" ref="jobDetail"/>
<!--        指定触发事件,基于Cron表达式--><property name="cronExpression">
<!--            从0秒开始,每10秒执行一次,测试功能使用--><value>0/10 * * * * ? </value>
<!--            从每天的3点开始执行一次-->
<!--            <value>0 0 3 * * ? </value>-->
<!--        从0小时开始,30分钟执行一次    -->
<!--            <value>0 0/30 * * * ?</value>--></property></bean><!--    注册一个触发器,指定任务触发时间,触发上面指定的方法--><bean id="myTrigger02" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"><!--        注入jobDetail,通过反射来调用我们上面自定义的方法--><property name="jobDetail" ref="jobDetail02"/><property name="cronExpression"><value>0/10 * * * * ? </value></property></bean><!--  统一注册一个调度工厂,通过这个调用工厂调度触发器任务  --><bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!--        可以注入多个触发器--><property name="triggers"><list>
<!--                注入上面触发器,可以注入多个,我由于上面配置了2个,所以我注入2个测试能否10秒执行方法--><ref bean="myTrigger"/><ref bean="myTrigger02"/></list></property></bean>
</beans>
java config方式(伪代码)
package com.fs.config;import com.fs.controller.JorumServerRegister;
import org.quartz.JobDetail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;@Configuration
public class QuartzConfig {//注入统一任务类@Autowiredprivate 任务类 jorumServerRegister;@Bean("heartbeat")public MethodInvokingJobDetailFactoryBean methodInvokingJobDetailFactoryBean(){MethodInvokingJobDetailFactoryBean methodInvokingJobDetailFactoryBean = new MethodInvokingJobDetailFactoryBean();//注入自定义的定时任务类的对象methodInvokingJobDetailFactoryBean.setTargetObject(jorumServerRegister);//注入自定义调用对象的具体执行的方法methodInvokingJobDetailFactoryBean.setTargetMethod("heartbeat");return methodInvokingJobDetailFactoryBean;}//触发器@Beanpublic CronTriggerFactoryBean cronTriggerFactoryBean(@Autowired @Qualifier("heartbeat") MethodInvokingJobDetailFactoryBean heartbeat){CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean();// 注入jobDetail,通过反射来调用我们上面自定义的方法JobDetail object = heartbeat.getObject();cronTriggerFactoryBean.setJobDetail(object);//10秒执行一次心跳方法cronTriggerFactoryBean.setCronExpression("0/10 * * * * ? ");return cronTriggerFactoryBean;}//注册一个统一调度工厂@Beanpublic SchedulerFactoryBean schedulerFactoryBean(@Autowired CronTriggerFactoryBean cronTriggerFactoryBean){SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();//注入上面触发器schedulerFactoryBean.setTriggers(cronTriggerFactoryBean.getObject());return schedulerFactoryBean;}
}
cron表达式

上面的入门案例中我们指定了一个表达式:0/10 * * * * ?
这种表达式称为cron表达式,通过cron表达式可以灵活的定义出符合要求的程序执行的时间。本小节我
们就来学习一下cron表达式的使用方法。如下图:

cron表达式分为七个域,之间使用空格分隔。其中最后一个域(年)可以为空。每个域都有自己允许的
值和一些特殊字符构成。使用这些特殊字符可以使我们定义的表达式更加灵活。
下面是对这些特殊字符的介绍:
逗号(,):指定一个值列表,例如使用在月域上1,4,5,7表示1月、4月、5月和7月
横杠(-):指定一个范围,例如在时域上3-6表示3点到6点(即3点、4点、5点、6点)
星号(*):表示这个域上包含所有合法的值。例如,在月份域上使用星号意味着每个月都会触发
斜线(/):表示递增,例如使用在秒域上0/15表示每15秒
问号(?):只能用在日和周域上,但是不能在这两个域上同时使用。表示不指定
井号(#):只能使用在周域上,用于指定月份中的第几周的哪一天,例如6#3,意思是某月的第三个
周五 (6=星期五,3意味着月份中的第三周)
L:某域上允许的最后一个值。只能使用在日和周域上。当用在日域上,表示的是在月域上指定的月份
的最后一天。用于周域上时,表示周的最后一天,就是星期六
W:W 字符代表着工作日 (星期一到星期五),只能用在日域上,它用来指定离指定日的最近的一个工作

cron表达式在线生成网站

前面介绍了cron表达式,但是自己编写表达式还是有一些困难的,我们可以借助一些cron表达式在线生
成器来根据我们的需求生成表达式即可。
cron表达式在线生成

QuartzHelloWorld

package com.fs.regularwork;import java.text.SimpleDateFormat;
import java.util.Date;
/*
自定义的普通类,让Quartz 通过反射来定时执行这个方法*/
public class QuartzHelloWorld {//编写定时执行的方法,注意要是public的public void quartzTest(){System.out.println("02:HelloWorld_Quartz"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date().getTime()));}
}

QuartzHelloWorld02

package com.fs.regularwork;import java.text.SimpleDateFormat;
import java.util.Date;/*
自定义的普通类,让Quartz 通过反射来定时执行这个方法*/
public class QuartzHelloWorld02 {//编写定时执行的方法,注意要是public的public void quartzTest02(){System.out.println("01:HelloWorld_Quartz"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date().getTime()));}
}

TestQuartz测试类

package com.fs.regularwork;import org.springframework.context.support.ClassPathXmlApplicationContext;
/*
测试Quartz*/
public class TestQuartz {public static void main(String[] args) {//只有创建了spring的容器,定时器就会去反射通过我们xml配置的cron表达式指定的时间去调用我们配置的方法new ClassPathXmlApplicationContext("classpath:applicationContext-jobs.xml");}
}

运行结果

Spring整合定时任务组件Quartz的简单使用相关推荐

  1. 美年旅游_套餐管理_定时任务组件Quartz

    文章目录 补充上前面没有的配置 先配置这些 2.4. 完善文件上传,Redis存储图片名称 美年旅游_套餐管理_定时任务组件Quartz 4.1. Quartz介绍 Quartz 入门案例 4.2. ...

  2. 定时任务组件Quartz

    1.Quartz介绍 Quartz是Job scheduling(作业调度)领域的一个开源项目,Quartz既可以单独使用也可以跟spring框架整合使用,在实际开发中一般会使用后者.使用Quartz ...

  3. 【Spring】定时任务

    spring的定时任务: 1)简单的有Java自带的Timer. ScheduledExecutorService, Spring自带的Task. 2)相较复杂的分布式定时任务中间件有XXL-JOB. ...

  4. java 定时任务插件_详解Spring整合Quartz实现动态定时任务

    最近项目中需要用到定时任务的功能,虽然spring 也自带了一个轻量级的定时任务实现,但感觉不够灵活,功能也不够强大.在考虑之后,决定整合更为专业的Quartz来实现定时任务功能. 普通定时任务 首先 ...

  5. Spring整合Quartz实现定时任务

    Quartz框架是一个极其成功的开源任务调度框架,目前很多公司在实现任务调度上都直接使用或在借鉴的基础上实现了自己的任务调度框架,Quartz使用Trigger,Job和JobDetail对象实现调度 ...

  6. 使用Spring整合Quartz轻松完成定时任务

    一.背景 上次我们介绍了如何使用Spring Task进行完成定时任务的编写,这次我们使用Spring整合Quartz的方式来再一次实现定时任务的开发,以下奉上开发步骤及注意事项等. 二.开发环境及必 ...

  7. spring整合quartz框架定时任务实战

    Spring整合定时任务调度框架Quartz实战 2014-09-12 11:51 9707人阅读 评论(6) 收藏 举报  分类: [综合问题](74)  版权声明:本文为博主原创文章,未经博主允许 ...

  8. Spring整合Schedule定时任务详解

    Spring整合Schedule定时任务详解 Spring 定时任务官方网站 一.概述 用Spring,就是为了简单. 但是我还是要总结下java定时任务实现的几种方式. 1.TimerTask,等于 ...

  9. spring整合quartz框架

    前言: 在一些项目中,往往需要定时的去执行一些任务,比如商城项目,每天0点去统计前一天的销量.那么如何实现呢,总不可能我们每天0点手动的去执行统计销量的方法吧,这时就quartz就起作用了. quar ...

最新文章

  1. 最高补助1000万元!这类程序员2020年要过好日子了……
  2. 目标检测 yolov1
  3. 字符串过长截断 html,(SqlServe)关于字符串长度被截断的问题
  4. python init 用法_python里init的用法
  5. 实例:从一个文件中读取销售记录,并合并生成销售报告,实现销售册数,总销售额,平均售价...
  6. 云图说|读请求太多怎么办?一键读写分离来帮忙
  7. dst发育筛查有意义吗_岱岳区妇幼保健院眼耳鼻喉科成功引进双目视力筛查仪
  8. leetcode121、122、123
  9. Android开发艺术探索知识回顾——第0章 书本内容介绍
  10. matlab 求留数,基于MATLAB的留数计算方法的探讨
  11. 视觉点胶机系统相机、镜头参数与选择
  12. [iOS开发]iOS调用系统相册相机
  13. web期末网站设计大作业 HTML+CSS+JS仿爱奇艺官网影视网站
  14. (转载)消息队列详解
  15. 费用报销与对公付款电子化管理系统:iBox+RPA已形成自动化闭环
  16. 【分享Oracle练习二】
  17. 微分算子法 求微分方程特解 (超简单)
  18. MSB30M-ASEMI贴片整流桥MSB30M
  19. 将两个有序顺序表合并为一个新的有序顺序表MergeList_Sq
  20. 模电精髓“200问”

热门文章

  1. WIN7+wampserver2.4+zend stadio10.6.1配置Xdebug
  2. Android模拟器慢的解决办法
  3. Err:query must begin with SELECT or FROM
  4. oracle性能调整的九大要点:四诊断latch竞争
  5. TcpSocket编程与Event编写学习的好例子
  6. android 一个有漂亮动画效果的Dialog
  7. Spring Boot 静态资源映射与上传文件路由配置
  8. Python入门4_之字典的使用
  9. 6.24AppCan移动开发者大会价值30万的展示机会归了谁?
  10. CentOS 快速安装pip