Quartz调用大全

1.Quartz应用范围广泛,可单独执行也可在spring中嵌入执行。

类似的定时任务在linux下可以用crontab执行

2.实现代码:

QuartzTest :主要执行类

package com.taobao.terminator.allen.QuartzTest;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.JobListener;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzTest {
private final static Log logger = LogFactory.getLog(QuartzTest.class);
public static void main(String[] args) {
System.out.println("this is test for Quartz");
//初始化scheduler工厂类
SchedulerFactory factory = new StdSchedulerFactory(); try {
//DirectSchedulerFactory生成一个实例,可create一个带名字的shceduler
Scheduler shceduler = factory.getScheduler(); //Quartz监听器,分为全局和局部的。局部的需要在特定的jobDetail中重回一次,全局不需要
JobListener jobListener = new QuartzListener("quartz - test");
shceduler.addJobListener(jobListener); //Shceduler的Context类似于servlet的context,功能相似.Context会传递给监听器
shceduler.getContext().put("coreName", "coreName"); //同样可以保存context的key-value ,jobDetail.getJobDataMap()
JobDetail jobDetail = new JobDetail("Full-Detail", "Full-Detail-Group", QuartzJob.class);
jobDetail.addJobListener("quartz - test");
jobDetail.getJobDataMap().put("jobDetail-data", "jobDetail"); //生成触发器
CronTrigger trigger = new CronTrigger("Full-Trigger" , "Full-Trigger-Group");
trigger.setCronExpression("0/30 * * * * ?"); //添加job
shceduler.scheduleJob(jobDetail, trigger); //开始执行shceduler
shceduler.start(); while(true) {
Thread.sleep(1000 * 10);
System.out.println("触发定时任务"); shceduler.triggerJob("Full-Detail", "Full-Detail-Group"); Thread.sleep(1000 * 40); //终止正在运行的job
shceduler.interrupt("Full-Detail", "Full-Detail-Group");
System.out.println("the schedule is over"); //关闭定时器
shceduler.shutdown(); break;
}
} catch (Exception e) {
logger.error("生成调试器失败" , e);
}
}
}

QuartzListener :监听器,可设置在jobDetail ,trigger, scheduler三个层次

主要对job执行之前及之后的进行操作,context可负责通信及异常,类似于servlet的context功能

package com.taobao.terminator.allen.QuartzTest;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobListener;
public class QuartzListener implements JobListener{
private String listenerName = "quartz-listener"; public QuartzListener(String listenerName) {
this.listenerName = listenerName;
} public String getName() {
return this.listenerName;
}
public void jobToBeExecuted(JobExecutionContext context) {
System.out.println("the job listener is start"); }
public void jobExecutionVetoed(JobExecutionContext context) {
}
public void jobWasExecuted(JobExecutionContext context,
JobExecutionException jobException) {
System.out.println("the job listener is end");
}
}

QuartzJob:注意中断方法的实现,可用于停止当前job,也可用shcedule.deleteJob(name,groupName)进行直接删除

import org.quartz.InterruptableJob;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.UnableToInterruptJobException;
public class QuartzJob implements InterruptableJob{
private boolean stop = false ;
public void execute(JobExecutionContext context) throws JobExecutionException {
if(!this.stop) {
System.out.println("this is ok");
}
}
public void interrupt() throws UnableToInterruptJobException {
this.stop = true ;
System.out.println("it is over");
} public boolean isStop() {
return stop;
}
}

转自:http://blog.csdn.net/flyingpig4/article/details/6263560

Quartz调用大全的更多相关文章

  1. WordPress页面函数功能代码调用大全

    WordPress模板基本文件 style.css 样式表文件index.php 主页文件single.php 日志单页文件page.php 页面文件archvie.php 分类和日期存档页文件sea ...

  2. spring中配置quartz调用两次及项目日志log4j不能每天生成日志解决方法

    在quartz中配置了一个方法运行时会连续调用两次,是因为加载两次,只需在tomcat的server.xml中修改配置 <Host name="www.xx.cn" appB ...

  3. Quartz 调用

    讲解 在线Cron表达式 调用(DLL下载) static void Main(string[] args) { //1.任务调度调用 //开启任务,操作数据,然后将数据广播给指定用户 //Cron表 ...

  4. dede日期时间标签调用大全

    dedecms最强大的功能就是调用标签,可以变换出各种样式的文章形式出来,本节将DEDECMS调用时间的样式做一个总结,基本所有的时间调用样式都有了,日期时间格式 (利用strftime()函数格式化 ...

  5. dede栏目调用大全

    A:侧边栏常用的当前栏目的父栏目调用(5.7) 1.在include/common.inc.php增加函数 function getTopCategoryName($cid=0) { global $ ...

  6. [置顶] android系统功能调用大全

    1.从google搜索内容  Intent intent = new Intent();  intent.setAction(Intent.ACTION_WEB_SEARCH);  intent.pu ...

  7. 常用的JS页面跳转代码调用大全

    一.常规的JS页面跳转代码 1.在原来的窗体中直接跳转用 <script type="text/javascript"> window.location.href=&q ...

  8. DedeCMS织梦模板标签调用大全

    本文转载:http://www.mubanzhijia.com/jishujiaocheng/1.html 关键描述调用标签: <meta name="keywords" c ...

  9. vue 父子组件传值以及方法调用,平行组件之间传值以及方法调用大全

    vue项目经常需要组件间的传值以及方法调用,具体场景就不说了,都知道.基本上所有的传值都可以用vuex状态管理来实现,只要在组件内监听vuex就好. vue常用的传值方式以及方法有: 1. 父值传子( ...

随机推荐

  1. hdu 1028 整数划分 (母函数)

    假如输入44 = 4;4 = 3 + 1;4 = 2 + 2;4 = 2 + 1 + 1;4 = 1 + 1 + 1 + 1;一共5种 假如输入3 用母函数的方法就是写成(1+X+X2+X3)(1+X ...

  2. hdu 5131 (2014广州现场赛 E题)

    题意:对给出的好汉按杀敌数从大到小排序,若相等,按字典序排.M个询问,询问名字输出对应的主排名和次排名.(排序之后)主排名是在该名字前比他杀敌数多的人的个数加1,次排名是该名字前和他杀敌数相等的人的个 ...

  3. pyspider 在ubuntu上安装失败怎么搞?

    pyspider 是一个非常不错的爬虫框架,在ubuntu上安装时报错误: 很明显pycurl的问题,pycurl没安装成功 pycurl 安装错误解决办法: sudo apt-get install ...

  4. .NET异步多线程,Thread,ThreadPool,Task,Parallel,异常处理,线程取消

    今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主,毕竟用的比较多的现在就是这些了,再往前去的,除非是老项目,不然真的应该是挺少了,大概有个概念,就当了解一 ...

  5. 【LOJ】#2070. 「SDOI2016」平凡的骰子

    题解 用了一堆迷之复杂的结论结果迷之好写的计算几何???? 好吧,要写立体几何了 如果有名词不懂自己搜吧 首先我们求重心,我们可以求带权重心,也就是x坐标的话是所有分割的小四面体的x坐标 * 四面体体 ...

  6. 【LOJ】#2275. 「JXOI2017」颜色

    题解 我们枚举右端点判断合法的左端点有哪些 首先,记录一下右端点右边的点的pre,也就是这个数字前一个出现的位置,取所有小于枚举右端点r的值中最大的一个做为l,用优先队列维护即可,[l + 1,r]就 ...

  7. loadrunner学习笔记之参数设置

    一.关于参数的定义 在你录制程序运行的过程中,脚本生成器自动生成由函数组成的用户脚本.函数中参数的值就是在录制过程中输入的实际值. 例如,你录制了一个Web应用程序的脚本.脚本生成器生成了一个声明,该 ...

  8. Django实战(3):Django也可以有scaffold

    rails有一个无用的”神奇“功能,叫做scaffold.能够在model基础上,自动生成CRUD的界面. 说它无用,是因为rails的开发者David说,scaffold”不是应用程序开发的目的.它 ...

  9. 黑马程序员_java基础笔记(09)...HTML基本知识、CSS、JavaScript、DOM

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 基本标签(a.p.img.li.table.div.span).表单标签.ifra ...

  10. 使用ASP.NET MVC+Entity Framework快速搭建系统

    详细资料: http://www.cnblogs.com/dingfangbo/p/5771741.html 学习 ASP.NET MVC 也有一段时间了,打算弄个小程序练练手,做为学习过程中的记录和 ...