最近在工作中,要做定时任务的更能,最开始的时候,想到的是 JavaSE 中,自带 Timer 及 TimerTask 联合使用,完成定时任务。最后发现,随着业务的复杂,JDK 中的 Timer 和 TimerTask 并不能简单、灵活的完成定时任务的操作。于是,便学习了任务调度框架-- Quartz。在最初的学习中,网上的例子大多数是基于 quartz-2.0.0 之前的版本,但是发现,2.0.0之前的版本和 2.0.0之后的变化还是比较大的,网上给出的例子及方法,都不适用了。最后,在学习了 quartz-2.1.7 之后,大致了解了下相关的方法。现分享出来,以供学习。

  首先是自定义自己的作业类,然后是开始任务调度操作。具体的使用方法,如下代码:

(1)自定义的作业类

/** 0.0.0.1 */package com.gaoqing.common.quartz;import java.text.SimpleDateFormat;
import java.util.Date;import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;/*** 自定义作业类* @author 高青* 2014-3-23*/
public class MyJob implements Job{/*** 2014-3-23*/public MyJob() {}@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {//得到当前作业的名称String jobName = context.getJobDetail().getJobDataMap().getString("name");System.out.println("当前作业开始执行了,作业的名称为:" + jobName + ",作业的时间是:" + new SimpleDateFormat("yyyy-MM-dd").format(new Date()));}}

作业类中的逻辑就是,取出任务调度器中注册的 JobDetail 的名称。

(2)具体的任务调度操作如下:

/** 0.0.0.1 */package com.gaoqing.common.quartz;import java.util.Date;import org.apache.log4j.Logger;
import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;/*** 简单任务调度测试类* @author 高青* 2014-3-20*/
public class SimpleQuartzTest{/** 日志对象 */private static Logger log = Logger.getLogger(SimpleQuartzTest.class);/*** 2014-3-20*/public SimpleQuartzTest() {}/*** 主线程方法* author 高青* 2014-3-20* @param args 参数字符串集* @return void 空* @throws SchedulerException 调度器异常*/public static void main(String[] args) throws SchedulerException {//得到一个默认的调度器Scheduler defaultScheduler = StdSchedulerFactory.getDefaultScheduler();//得到具体的和指定作业相关的 JobDetail 对象JobDetail jobDetail = JobBuilder.              //2.0.0之后,JobDetail 变成了接口,不能用之前的 new JobDetail()来实例了,现在要通过相应的作业建造器来管理生成newJob(MyJob.class).withIdentity("myFirstJob", "firstJob").build();              //要调用建造器的 build()方法,才能实例当前作业的具体作业对象//得到作业的参数对象JobDataMap jobDataMap = jobDetail.getJobDataMap();   //可以向作业数据对象中,存放自己需要的数据,在自己实现的 Job 类中,可以通过 context 得到相应的参数,以便做业务处理jobDataMap.put("myFirstJob", "first");     jobDataMap.put("name", "myFirstJob");     //实例化触发器对象(定义执行的时间和执行的周期)SimpleTrigger simpleTrigger = TriggerBuilder.newTrigger(). //同上,触发器的也需要相应的建造器来实例化触发器,现在的 Trigger 也是接口,不能通过 new Trigger() 来实例化了withIdentity(TriggerKey.triggerKey("myFirstTigger", "myFirstGroup")).withSchedule(                       //在得到对应的 SimpleTrigger 时,需要通过触发器建造器的 widthSchedule()方法,建造对应的触发器SimpleScheduleBuilder.simpleSchedule().repeatForever().withIntervalInSeconds(5)).startAt(new Date()).build();//添加调度作业(将具体的作业和触发器添加到作业中)
        defaultScheduler.scheduleJob(jobDetail, simpleTrigger);//执行调度任务
        defaultScheduler.start();}
}

  上面就是一个简单的任务调度的实现,和之前的版本相比,变化还是挺大了,个人感觉后面的版本更强调了性能和多任务处理。本文主要旨在实用,并不讲解大量的理论,理论在网上都是可以搜到的。希望自己的一点点分享,能对他人有一点点的帮助。下一篇,将写一个简单的任务调度实例,使用更能强大的 CronTrigger 触发器来实现任务调度功能。

  

Quartz_简单编程式任务调度使用(SimpleTrigger)相关推荐

  1. Spring4.0编程式定时任务配置

    看过很多定时调度的配置,大多使用XML配置,觉得比较麻烦,也比较老套.这里介绍一种基于spring4.0注解编程式配置定时任务,简单清晰,使用方便.. 至于引入spring相关jar这里不多说,直接切 ...

  2. 全面分析 Spring 的编程式事务管理及声明式事务管理(转)

    摘要 Spring 的事务管理是 Spring 框架中一个比较重要的知识点,该知识点本身并不复杂,只是由于其比较灵活,导致初学者很难把握.本教程从基础知识开始,详细分析了 Spring 事务管理的使用 ...

  3. 全面分析 Spring 的编程式事务管理及声明式事务管理--转

    开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...

  4. KubeVela 1.0 :开启可编程式应用平台的未来

    作者 | KubeVela 项目维护者 来源 | 阿里巴巴云原生公众号 作为 OAM(Open Application Model)在 Kubernetes 上的实现,KubeVela 项目从 oam ...

  5. spring 的4种事务管理(1种编程式+3种声明式)

    见:http://blog.csdn.net/sinat_25926481/article/details/48208619 Spring的4种事务管理(1种编程式事务+三种声明事务) 一.Sprin ...

  6. vue-router详尽:编程式导航、路由重定向、动态路由匹配、路由别名、嵌套路由、命名视图

    vue-router编程式导航 在vue项目中经常用到this.$router.push() 和 this.$router.replace() 方法进行路由跳转就是编程式导航... 通俗理解编程式导航 ...

  7. Spring事务处理之 编程式事务 和 声明式事务

    对事务概念还不了解的可以先看一下 MySQL事务管理(初步了解) 这篇文章 !!! Spring事务管理学习步骤: 1.掌握Spring事务属性 2.掌握Spring事务核心API 3.掌握Sprin ...

  8. spring编程式事务

    事务是spring框架中一个核心的模块,事务的ACID特性想必对于学习java的同学来说都不陌生,对于spring,实现事务的底层原理其实很简单,就是通过AOP代理进行实现,而实现spring的AOP ...

  9. vue编程式导航,命名路由

    //使用 window.location.href 的形式,叫做 编程式导航 绑定事件的形式 <template><div class="goods-item" ...

最新文章

  1. sqlite c++插入 timestamp_Dqlite,基于sqlite 高可用(HA)数据库
  2. python爬虫requests源码链家_python爬虫——爬取链家房价信息(未完待续)
  3. Leetcode打卡 | No.24 两两交换链表中的节点
  4. windows 2013 datacenter 安装sql server2008 r2兼容性
  5. java图书馆库存管理系统_书店图书库存管理系统.doc
  6. 自动驾驶高精地图-概述与分析
  7. Android局域网工具,NetX(局域网管理工具)
  8. 嵌入式硬件入门——74HC138译码器(三个IO实现8选1)
  9. Linux之ClamAV杀毒软件YUM安装和使用
  10. 最简单的深度学习入门书《动手学深度学习》
  11. 什么是OA系统的工作流?
  12. java邮件发送代码报错_javamail发送附件不通过也不报错
  13. Python处理txt文件:多句分行+行首尾添加字符+for循环--Python新手自练系列
  14. 游戏网站搭建,不止是一个网站那么简单
  15. Linux磁盘无法umount的问题
  16. c语言 gps课程设计,完整版GPS定位系统设计.doc
  17. TypeError: norm() received an invalid combination of arguments解决办法
  18. 天气预报-微信小程序-源码
  19. 视线追踪原理及论文讲解
  20. APP信息管理平台总结

热门文章

  1. file java详解_Java中File的实例详解
  2. 信息学奥赛一本通(1229:电池的寿命)
  3. 信息学奥赛一本通(1206:放苹果)
  4. 字符串处理 —— 回文串相关 —— Manacher 算法
  5. Command NetWork(POJ-3164)
  6. 基础算法 —— 高精度计算 —— 高精度乘法
  7. 3.5 SE93创建自建表事务码
  8. 协同过滤算法_基于Mahout的协同过滤推荐算法
  9. OpenGL:关于获取渲染结果的深度信息的问题(二)
  10. linux内核那些事之 VMA Gap