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

时间: 2024-11-13 08:14:29

Quartz调用大全的相关文章

dede日期时间标签调用大全

dedecms最强大的功能就是调用标签,可以变换出各种样式的文章形式出来,本节将DEDECMS调用时间的样式做一个总结,基本所有的时间调用样式都有了,日期时间格式 (利用strftime()函数格式化时间) 下面的调用代码只能使用在首页:1. 形式(12-12)  调用代码:([field:pubdate function='strftime("%m-%d",@me)'/]) 2. 形式(may 12,2010) 调用代码:([field:pubdate function='strft

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

在quartz中配置了一个方法运行时会连续调用两次,是因为加载两次,只需在tomcat的server.xml中修改配置 <Host name="www.xx.cn" appBase="" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="webapps/demo" reloadable=&quo

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

WordPress模板基本文件 style.css 样式表文件index.php 主页文件single.php 日志单页文件page.php 页面文件archvie.php 分类和日期存档页文件searchform.php 搜索表单文件search.php 搜索yemian文件comments.php 留言区域文件(包括留言列表和留言框)404.php 404错误页面header.php 网页头部文件sidebar.php 网页侧边栏文件footer.php 网页底部文件 WordPress H

织梦后台文章页标签调用大全

合理的利用文章调用标签,不禁可以加强页面的用户体验,也可以使网站的结构布局更加合理,充分的展示我们想要推广的文章,增加文章的曝光率.   虽然之前有发过一篇织梦文章标签,但是我习惯性的把首页,列表页以及文章页标签都保存在不同的文档里,这样用起来更方便一些.下面把整理了一份关于织梦文章样式属性的调用标签跟大家分享一下,大家可以按照自己的习惯进行整理. 1.最新文章调用标签 {dede:arclist row='10' titlelen='24' orderby='pubdate' idlist='

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

一.常规的JS页面跳转代码 1.在原来的窗体中直接跳转用 <script type="text/javascript"> window.location.href="你所要跳转的页面"; </script> 2.在新窗体中打开页面用: <script type="text/javascript"> window.open('你所要跳转的页面'); </script> 3.JS页面跳转参数的注解 &l

板邓:dedecms织梦标签调用大全

网站名称:{dede:global.cfg_webname/} 网站根网址:{dede:global.cfg_basehost/} 网站根目录:{dede:global.cfg_cmsurl/} 网页主页链接:{dede:global.cfg_indexurl/} 网站描述:{dede:global.cfg_description/} 网站关键字:{dede:global.cfg_keywords/} 模板路径:{dede:global.cfg_templets_skin/} 调用页面:{ded

DedeCMS织梦模板标签调用大全

本文转载:http://www.mubanzhijia.com/jishujiaocheng/1.html 关键描述调用标签: <meta name="keywords" content="{dede:field name='keywords'/}"><meta name="description" content="{dede:field name='description' function='html2text(

dedecms 标签调用大全

关键描述调用标签: <meta name="keywords" content="{dede:field name='keywords'/}"><meta name="description" content="{dede:field name='description' function='html2text(@me)'/}"> ------------------------------------

java计划任务调度框架quartz结合spring实现调度的配置实例代码分享

点击链接加入群[JavaEE(SSH+IntelliJIDE+Maven)]:http://jq.qq.com/?_wv=1027&k=L2rbHv 一:quartz简介 OpenSymphony 的Quartz提供了一个比较完美的任务调度解决方案. Quartz 是个开源的作业调度框架,定时调度器,为在 Java 应用程序中进行作业调度提供了简单却强大的机制. Quartz中有两个基本概念:作业和触发器.作业是能够调度的可执行任务,触发器提供了对作业的调度 二:quartz spring配置详