Quartz 多个触发器

http://www.oschina.net/code/snippet_114990_4440

最近项目中要做个定时生成静态html文件东东,7点到19点每5分钟生成一次,其他时间1小时生成一次,刚开始就走错了 居然想用一条cron表达式搞定,搞了半天,问了好多人,得到一个好的办法,就是给以个job创建多个触发器,不扯了,看代码。。

创建job并给job添加多个触发器

package com.f139.frame.job;

import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import static org.quartz.CronScheduleBuilder.cronSchedule;

import java.text.ParseException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import org.nutz.ioc.Ioc;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;

import com.f139.frame.pojo.factory.Template;

public class CreateJob {

    private static SchedulerFactory sf = new StdSchedulerFactory();

    public static void createTemplateJob(Map<Integer, Template> map, Ioc ioc) {
        Scheduler sched;
        try {
            sched = sf.getScheduler();

            // ioc参数,将ioc传递到job中
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("ioc", ioc);
            // 获取所有模板
            Collection<Template> templates = map.values();
            for (Template template : templates) {
                if (template.getIntervalTime() > 0) {
                    // 将当前模板ID传入job中
                    params.put("templateID", template.getTemplateID());
                    // 创建作业
                    JobDetail jobDetail = newJob(TemplateJob.class).withIdentity(new JobKey("templateJob_" + template.getTemplateID(), "template")).usingJobData(
                            new JobDataMap(params)).build();
                    // 创建触发器,并将触发器加入到作业中
                    sched.scheduleJob(jobDetail, newTrigger().withIdentity(new TriggerKey("between7and19_" + template.getTemplateID(), "template")).withSchedule(
                            cronSchedule("0 0/1 7-19 * * ?")).forJob(jobDetail).build());
                    sched.scheduleJob(newTrigger().withIdentity(new TriggerKey("between0and7_" + template.getTemplateID(), "template")).withSchedule(
                            cronSchedule("0 0/5 0-7 * * ?")).forJob(jobDetail).build());
                    sched.scheduleJob(newTrigger().withIdentity(new TriggerKey("between19and23_" + template.getTemplateID(), "template")).withSchedule(
                            cronSchedule("0 0/5 19-23 * * ?")).forJob(jobDetail).build());
                }
            }
            sched.start();
        } catch (SchedulerException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }

    }
}

  

job处理类

package com.f139.frame.job;

import java.util.Map;

import org.nutz.dao.Dao;
import org.nutz.ioc.Ioc;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import com.f139.frame.freemarker.FreemarkerUtile;
import com.f139.frame.pojo.factory.Log;
import com.f139.frame.pojo.factory.Template;
import com.f139.frame.system.LocalCache;
import com.f139.frame.util.DateUtil;

public class TemplateJob implements Job {

    private Dao dao = null;
    private Ioc ioc = null;

    @Override
    @SuppressWarnings("unchecked")
    public void execute(JobExecutionContext context) throws JobExecutionException {
        Map<String, Object> params = null;
        Template template = null;
        FreemarkerUtile freemarkerUtile = null;
        try {
            // 获取参数
            params = context.getJobDetail().getJobDataMap();
            // 获取ioc
            ioc = (Ioc) params.get("ioc");

                    // 获取Dao
            dao = ioc.get(NutDao.class,"dao");

            // 获取当前模板
            template = LocalCache.selectTemplateByID.get(Integer.parseInt(params.get("templateID").toString()));
            // 获取FreemarkerUtile
            freemarkerUtile = ioc.get(FreemarkerUtile.class, "freemarkerUtile");
            // 创建文件
            freemarkerUtile.createHtml(template.getTemplateContent(), template.getFileUrl(), null);

        } catch (Exception e) {
            FailLog("模板" + template.getTemplateName() + "在" + DateUtil.getNowString() + "生成静态文件时发生异常!");
        }

    }

    public void FailLog(String message) {
        Log log = new Log();
        log.setUserName("admin");
        log.setLogClass("html");
        log.setLogLevel("9");
        log.setLogMessage(message);
        log.setUpdateTime(DateUtil.getNowString());
        dao.insert(log);
    }

}

  

时间: 2024-11-10 19:43:14

Quartz 多个触发器的相关文章

Quartz Trigger Priority 触发器优先级

Quartz Trigger Priority 触发器优先级 当多个触发器在一个相同的时间内触发,并且调度引擎中的资源有限的情况下,那么具有较高优先级的触发器先触发. 需要将配置文件中的org.quartz.threadPool.threadCount = 1设置为1,这样能更好的测试出效果. package com.gary.operation.jobdemo.example14; import static org.quartz.DateBuilder.futureDate; import

Quartz(自动任务)中的触发器Trigger

1.Quartz中的触发器TriggerJob 包含了要执行任务的逻辑,但是 Job 对何时该执行却一无所知.这个事情留给了 Trigger.Quartz Trigger 继承了抽象的 org.quartz.Trigger 类.当前,Quartz 有三个可用的 Trigger: Java代码 ·org.quartz.SimpleTrigger ·org.quartz.CronTrigger ·org.quartz.NthIncludeDayTrigger 2.SimpleTrigger的介绍正如

定时器(Quartz)快速入门

Quartz概述 Quartz中的触发器 Quartz中提供了两种触发器,分别是CronTrigger和SimpleTrigger. SimpleTrigger 每 隔若干毫秒来触发纳入进度的任务.因此,对于夏令时来说,根本不需要做任何特殊的处理来"保持进度".它只是简单地保持每隔若干毫秒来触发一次,无论你的 SimpleTrigger每隔10秒触发一次还是每隔15分钟触发一次,还是每隔24小时触发一次. CronTrigger 在特定"格林日历"时刻触发纳入进程的

一个简单的使用Quartz和Oozie调度作业给大数据计算平台执行

一,介绍 Oozie是一个基于Hadoop的工作流调度器,它可以通过Oozie Client 以编程的形式提交不同类型的作业,如MapReduce作业和Spark作业给底层的计算平台(如 Cloudera Hadoop)执行. Quartz是一个开源的调度软件,它为任务的调度执行提供了各种触发器以及监听器 下面使用Quartz + Oozie 将一个MapReduce程序提交给Cloudera Hadoop执行 二,调度思路 ①为什么要用Quartz呢?主要是借助Quartz强大的触发器功能.它

Spring整合Quartz实现定时任务调度

一. 核心类 1. Job: 表示一个工作, 具体的业务处理都在这里. 2. JobDetail: 表示一个具体的可执行的调度程序. 3. Trigger: 用于调度参数的配置(什么时候去调用Job). 4. Scheduler: 表示一个调度容器, 容器中有一个线程池, 用来并行调度执行每个作业, 一个调度容器中可以注册多个JobDetail和Trigger. 二. 整合spring 1. 代码结构图: 2. applicationContext.xml <?xml version="1

[Quartz笔记]玩转定时调度

简介 Quartz是什么? Quartz是一个特性丰富的.开源的作业调度框架.它可以集成到任何Java应用. 使用它,你可以非常轻松的实现定时任务的调度执行. Quartz的应用场景 场景1:提醒和告警 场景2:监听事务 场景3:定时作业 Quartz的安装 安装 1.可以直接在官网:http://www.quartz-scheduler.org/ 下载jar包. 2.如果使用maven,可以在pom.xml中添加以下依赖jar包: <dependency> <groupId>or

Quartz 入门详解

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表.Jobs可以做成标准的Java组件或 EJBs.官方网站:http://www.opensymphony.com/quartz 相关Jar:   quartz-all-1.6.0.jar   jta.jar   commons-logging-1.1.jar

Spring任务调度之Quartz

一.Quartz作业类的继承方式来讲,可以分为两类: 作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.QuartzJobBean:java.util.Timer中需要继承自java.util.TimerTask. 作业类即普通的java类,不需要继承自任何基类. 注:推荐使用第二种方式,因为这样所以的类都是普通类,不需要事先区别对待. 从任务调度的触发时机来分,这里主要是针对作业使用的触发器,主要有以下两种:

Spring 中使用Quartz实现任务调度

前言:Spring中使用Quartz 有两种方式,一种是继承特定的基类:org.springframework.scheduling.quartz.QuartzJobBean,另一种则不需要,(推荐使用第二种).下面分别介绍. 1.作业类继承 org.springframework.scheduling.quartz.QuartzJobBean 第一步:定义作业类 java代码 1 import java.text.SimpleDateFormat; 2 import java.util.Dat