1、Quartz介绍

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

官网:Quartz Enterprise Job Scheduler

maven坐标:

<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>

2、Quartz入门案例

本案例基于Quartz和spring整合的方式使用。具体步骤:

(1)创建maven工程quartzdemo,导入Quartz和spring相关坐标,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.itheima</groupId><artifactId>quartdemo</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.0.2.RELEASE</version></dependency><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>

(2)自定义一个Job

package com.itheima.jobs;
/*** 自定义Job*/
public class JobDemo {public void run(){System.out.println("job execute...");}
}

(3)提供Spring配置文件spring-jobs.xml,配置自定义Job、任务描述、触发器、调度工厂等

<?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:dubbo="http://code.alibabatech.com/schema/dubbo"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 注册自定义Job --><bean id="jobDemo" class="com.itheima.jobs.JobDemo"></bean><!-- 注册JobDetail,作用是负责通过反射调用指定的Job --><bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><!-- 注入目标对象 --><property name="targetObject" ref="jobDemo"/><!-- 注入目标方法 --><property name="targetMethod" value="run"/></bean><!-- 注册一个触发器,指定任务触发的时间 --><bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"><!-- 注入JobDetail --><property name="jobDetail" ref="jobDetail"/><!-- 指定触发的时间,基于Cron表达式 --><property name="cronExpression"><value>0/10 * * * * ?</value></property></bean><!-- 注册一个统一的调度工厂,通过这个调度工厂调度任务 --><bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><!-- 注入多个触发器 --><property name="triggers"><list><ref bean="myTrigger"/></list></property></bean>
</beans>

(4)编写main方法进行测试

package com.itheima.jobs.com.itheima.app;
​
import org.springframework.context.support.ClassPathXmlApplicationContext;
​
public class App {public static void main(String[] args) {new ClassPathXmlApplicationContext("spring-jobs.xml");}
}

执行上面main方法观察控制台,可以发现每隔10秒会输出一次,说明每隔10秒自定义Job被调用一次。

3、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 字符代表着工作日 (星期一到星期五),只能用在日域上,它用来指定离指定日的最近的一个工作日

4、cron表达式在线生成器

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

在线Cron表达式生成器

定时任务组件Quartz相关推荐

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

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

  2. Spring整合定时任务组件Quartz的简单使用

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

  3. [JAVA]定时任务之-Quartz使用篇

    目录(?)[+] 定时任务之-Quartz使用篇 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用 ...

  4. SpringBoot定时任务 - 集成quartz实现定时任务(单实例和分布式两种方式)

    最为常用定时任务框架是Quartz,并且Spring也集成了Quartz的框架,Quartz不仅支持单实例方式还支持分布式方式.本文主要介绍Quartz,基础的Quartz的集成案例本,以及实现基于数 ...

  5. 定时任务框架Quartz

    在Spring Boot 中要实现定时任务,有两中方案,一种是使用 Spring 自带的定时任务处理器 @Scheduled 注解,另一种就是使用Quartz. 1.Scheduled 这种用法非常简 ...

  6. 定时任务:Quartz 详解

    定时任务:Quartz 详解 文章目录 定时任务:Quartz 详解 1 Quartz是什么? 2 Quartz核心组成 3 Quartz核心模块理解 3.1 用工厂模式理解 Quartz 的设计机制 ...

  7. [BAT][JAVA]定时任务之-Quartz使用篇(通过这个配置可以知道在做Quartz的时候需要的jar文件/Cron表达式使用语法/常用Cron表达式)

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...

  8. Quartz学习总结(2)——定时任务框架Quartz详解

    一.概述 Quartz是OpenSymphony开源组织的一个开源项目,定时任务框架,纯Java语言实现,最新版本为2.3.0. Quartz中用到的设计模式:Builder模式.Factory模式. ...

  9. quarts集群 运维_定时任务之Quartz和Elastic-Job

    一.背景 常用的定时任务一般有:JDK Timer.Spring Task.Quartz.xxl-job.Elastic-job. JDK Timer:JDK自带的定时任务,1.5之前不支持多线程,1 ...

最新文章

  1. 【通俗理解线性代数】 -- 矩阵与空间的基和坐标
  2. iOS10 推送必看 UNNotificationContentExtension
  3. jQuery,data()方法学习
  4. [小程序]微信小程序登陆并获取用户信息
  5. tyvj 1067 合唱队形 dp LIS
  6. javascript_如何不再害怕JavaScript
  7. Visual Studio的扩展
  8. Centos6.9 minmal 安装
  9. java console输出_将java console的输出写入文件
  10. 记住:永远不要在MySQL中使用utf8,请使用utf8mb4
  11. 【Django】The view userWeb.views. didn‘t return an HttpResponse object. It returned None instead.
  12. Docker的网络类型及驱动器
  13. intel网卡驱动下载linux,Intel网卡驱动下载_万能英特尔网卡驱动_万能网卡驱动_5分享...
  14. LaTex软件安装方式
  15. Golang之自旋锁
  16. NTP 时区+时间同步
  17. java 减法基础_Java 基础入门
  18. PyQT6的从零开始(三):在pyqt桌面程序简单内置网页浏览器
  19. 数学黑洞6174java_奇妙的数字黑洞——6174
  20. Oracle数据库中的数据加密

热门文章

  1. Endnote中有的文献没有Pages信息怎么办?
  2. TikZ绘制多样的花括号
  3. python制作动画的软件_分享7个好用的动画制作软件,学会它,人人可以成为动画大师...
  4. 计算机网络哪个学校好厦门,厦门较好的的计算机学校有哪几间
  5. 高职对计算机课程要求,高职计算机应用专业课程设置浅析
  6. rr与hr_BP、HR、RR、SPO2、ECG各是什么意思
  7. 火星辩证派第1期·精华版:为什么在DeFi这个赛道上国外项目异常火爆,中国市场却反应迟缓?...
  8. 国产CPU产业链的逻辑架构
  9. jvarkit包问题反馈:构建成功,部分方法测试失败第1类错误分析
  10. nokia x android 界面,诺基亚(NOKIA)X手机主界面评测-ZOL中关村在线