Quartz的基本使用之入门(2.3.0版本)

一、Quartz可以用来做什么

Quartz是一个强大任务调度框架,我工作时候会在这些情况下使用到quartz框架,当然还有很多的应用场景,在这里只列举2个实际用到的

  • 餐厅系统会在每周四晚上的22点自动审核并生成报表
  • 人事系统会在每天早晨8点给有待办的人员自动发送Email提醒

二、使用Quartz之前的准备

1.建立一个Maven项目

2.引入quartz的依赖  

  使用quartz,我们仅仅需要在maven的pom文件中添加依赖即可。我使用的是现在最新的一个版本2.3.0,大家可以在maven的仓库获取到最新的版本依赖,地址:http://mvnrepository.com/artifact/org.quartz-scheduler/quartz

  但然也可以使用这个2.3.0的依赖,下面的例子都是使用此依赖并实现了效果。

<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.0</version>
</dependency>

三、编写第一个Quartz任务案例 - 每隔2秒钟打印一次HelloQuartz

先实现一下这个基本的Quartz的任务再来介绍一下Quartz的3个重要组成,JobDetail,Trigger,Scheduler

1.创建一个类 HelloJob.java,这个类是编写我们的具体要实现任务(打印Hello Quartz)

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;import java.text.SimpleDateFormat;
import java.util.Date;
public class HelloJob implements Job{public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {//打印当前的执行时间 例如 2017-11-23 00:00:00Date date = new Date();SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("现在的时间是:"+ sf.format(date));//具体的业务逻辑System.out.println("Hello Quartz");}
}

2.创建一个类HelloScheduler.java,这个是具体触发我们的任务

public class HelloScheduler {public static void main(String[] args) throws SchedulerException {//创建一个jobDetail的实例,将该实例与HelloJob Class绑定JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob").build();//创建一个Trigger触发器的实例,定义该job立即执行,并且每2秒执行一次,一直执行SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger").startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();//创建schedule实例StdSchedulerFactory factory = new StdSchedulerFactory();Scheduler scheduler = factory.getScheduler();scheduler.start();scheduler.scheduleJob(jobDetail,trigger);}
}

3.执行main方法,Run 'HelloScheduler.main()',可以看见如下效果,表明任务执行成功了

4.一句话看懂quartz

1、创建调度工厂();      //工厂模式

2、根据工厂取得调度器实例();    //工厂模式

3、Builder模式构建子组件<Job,Trigger>    // builder模式, 如JobBuilder、TriggerBuilder、DateBuilder

4、通过调度器组装子组件   调度器.组装<子组件1,子组件2...>    //工厂模式

5、调度器.start();   //工厂模式

四、第二个案例 -  每日的9点40分触发任务打印HelloQuartz

 与上一个的简单案例的区别在于,SimpleTrigger/CronTrigger. 简单的定时任务,可以采用SimpleTrigger,复杂的任务一般采用CronTrigger.cronTrigger不仅可以设定单的触发时间表,更可以设定非常复杂的触发时间表。 CronTrigger 是基于 Unix类似于 cron 表达式,如果对cron表达式比较熟悉,那么学习起来经非常简单. 即使对cron表达式不熟悉,花一会儿的功夫也可以学会。(在工作中我们直接使用网上的在线生成表达式即可又快又准确)生成地址:http://cron.qqe2.com/

先上代码,然后介绍一下cron表达式生成规则。

1.编写任务类 HelloJob.java,具体情况编写具体内容,如生成报表,发送邮件。。

public class HelloJob implements Job{public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {//打印当前的执行时间 例如 2017-11-22 00:00:00Date date = new Date();SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("现在的时间是:"+ sf.format(date));//具体的业务逻辑System.out.println("开始生成任务报表 或 开始发送邮件");}
}

2.编写任务触发类  CronScheduler.java

public class CronScheduler {public static void main(String[] args) throws SchedulerException, InterruptedException {//jobDetailJobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("cronJob").build();//cronTrigger//每日的9点40触发任务CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("cronTrigger").withSchedule(CronScheduleBuilder.cronSchedule("0 40 9 * * ? ")).build();//1.每日10点15分触发      0 15 10 ?* *//2.每天下午的2点到2点59分(正点开始,隔5分触发)       0 0/5 14 * * ?//3.从周一到周五每天的上午10点15触发      0 15 10 ? MON-FRI//4.每月的第三周的星期五上午10点15触发     0 15 10 ? * 6#3//5.2016到2017年每月最后一周的星期五的10点15分触发   0 15 10 ? * 6L 2016-2017//Scheduler实例StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory();Scheduler scheduler = stdSchedulerFactory.getScheduler();scheduler.start();scheduler.scheduleJob(jobDetail,cronTrigger);}
}

quartz定时任务时间设置

每天凌晨2点  0 0 2 * * ?和每天隔一小时 0 * */1 * * ?

例1:每隔5秒执行一次:*/5 * * * * ?

例2:每隔5分执行一次:0 */5 * * * ?
在26分、29分、33分执行一次:0 26,29,33 * * * ?

例3:每天半夜12点30分执行一次:0 30 0 * * ? (注意日期域为0不是24)
每天凌晨1点执行一次:0 0 1 * * ?

每天上午10:15执行一次: 0 15 10 ? * * 或 0 15 10 * * ? 或 0 15 10 * * ? *

每天中午十二点执行一次:0 0 12 * * ?

每天14点到14:59分,每1分钟执行一次:0 * 14 * * ?

每天14点到14:05分,每1分钟执行一次:0 0-5 14 * * ?

每天14点到14:55分,每5分钟执行一次:0 0/5 14 * * ?

每天14点到14:55分,和18点到18点55分,每5分钟执行一次:0 0/5 14,18 * * ?

每天18点执行一次:0 0 18 * * ?

每天18点、22点执行一次:0 0 18,22 * * ?

每天7点到23点,每整点执行一次:0 0 7-23 * * ?

每个整点执行一次:0 0 0/1 * * ?

转载地址:

https://www.cnblogs.com/zhanghaoliang/p/7886110.html

(优秀文章保存)Quartz优秀文章保存相关推荐

  1. java 黑马头条 day4 自媒体文章发布 自媒体文章列表查询 频道列表展示 自媒体文章-发布、修改、保存草稿 自媒体文章-根据id查询 自媒体文章-删除

    1 自媒体文章列表查询 1.1 需求分析 1.2 表结构和实体类 wm_news 自媒体文章表 需求: 如果有文章标题,按照文章标题模糊查询 如果有频道信息,按照频道ID查询 如果有文章状态,按照状态 ...

  2. 快速撰写帝国CMS文章,打造优秀自媒体

    如果你是一位自媒体从业者,那么你一定知道,优秀的文章标题推荐是吸引读者的重要手段.今天,我们将以帝国CMS为例,探讨如何撰写优秀的自媒体文章. 一.了解帝国CMS 首先,我们需要了解什么是帝国CMS. ...

  3. 网站复制图片保存自己服务器,WordPress将复制别的网站的文章里的图片自动保存到自己的服务器...

    WordPress将复制别的网站的文章里的图片自动保存到自己的服务器 王超 2020-10-29 插件使用 1,509 次 我们都知道一个网站上的内容尽量的去做原创,这样对SEO优化是有好处的,但是有 ...

  4. 小程序画布画海报保存成图片可以保存实现完整代码

    老规矩先来个效果图: 因为是截图所以会有些模糊,在真机上会比较清晰 下面针对效果图来看看里面都画了什么元素,代码在文章的最后,大家想直接拷代码可以略过这,这里是方便大家理解代码. 首先,咱们的海报有几 ...

  5. 帝国cms文章页调用当前文章URL如何操作?

    前面我们讨论过dedecms文章页调用地址(当前文章URL)如何操作,作为同台竞技的帝国cms也能在文章页调用当前文章URL吗?答案是肯定的!那就随ytkah一起来探索一下吧 帝国cms模板是在后台直 ...

  6. java 保存html页面,java保存html标签

    java保存html标签 [2021-02-02 19:39:15]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/( ...

  7. linux怎样保存文件,linux不能保存文件如何解决

    linux不能保存文件如何解决 发布时间:2020-05-06 10:38:21 来源:亿速云 阅读:317 作者:小新 linux不能保存文件如何解决?相信有很多人都不太了解,今天小编为了让大家更加 ...

  8. 计算机社团评优申报资料,优秀学生社团申报表 优秀社团申报材料

    文章摘要:优秀学生社团申报表[ syxxll发表于2014/12/4 9:59:44 ] 连云港市中小学优秀学生社团申报表 县区 学校名称 社团名称 首席指导 教师姓名 社长姓名 -- 优秀学生社团申 ...

  9. 计算机专业优秀毕业生,计算机专业优秀毕业生求职信

    计算机专业优秀毕业生求职信 尊敬的各位领导: 你们好!本人是xx科技大学电气与控制工程学院微电子学的一名应届毕业生. 在大学三年里,时刻按照"团结 勤奋 求实创新"的校风,&quo ...

最新文章

  1. 【MM模块】Invoice with Variances 差异
  2. 又跌!6月全国程序员工资新统计,太扎心
  3. php代码里加图片,php如何添加图片
  4. myeclipse试用小记----Hibernate多对一双向关联(2)
  5. 实验4-1-10 兔子繁衍问题 (15 分)
  6. go基础_defer
  7. Blocking waiting for file lock on package cache
  8. 编程实现之k均值算法
  9. NOI Linux 2.0 桌面背景展示
  10. 基于CAA的CATIA二次开发环境搭建全过程(亲测可用)
  11. VUE element ui 动态合并单元格问题
  12. go语言开发工具sublime text3 + gosublime配置
  13. [C#] 内存占用释放
  14. linux dd命令
  15. 拓普康机器人控制器_营山拓普康MS05AXⅡ全自动测量机器人价格
  16. 对数据类型而言运算符无效。运算符为 add,类型为 ntext
  17. EXCEL如何从地址中提取省、市、区
  18. 用Kotlin写android点击事件
  19. Object对象中有那些方法。
  20. angular文件上传php,ajax jquery angular 上传文件与分隔上传

热门文章

  1. 证书体系: PFX 文件格式解析
  2. java 中violate_Java中的Volatile关键字
  3. visual paradigm 表示选择关系_知识获取的新挑战—远程监督关系抽取
  4. 解决:Xshell如何修改默认的登录用户,自动跳转到密码界面
  5. JAVA入门级教学之(classpath的配置)
  6. pythonwx功能_python中wx模块的具体使用方法
  7. java dumpstack_Java获取执行进程的dump文件及获取Java stack
  8. 三维错切变换矩阵_图像的仿射变换
  9. jdk 安装_Linux入门之Linux CentOS安装jdk
  10. 【LeetCode笔记】221. 最大正方形(Java、动态规划、思路题)