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);
} }

  

Quartz 多个触发器的更多相关文章

  1. Quartz Trigger Priority 触发器优先级

    Quartz Trigger Priority 触发器优先级 当多个触发器在一个相同的时间内触发,并且调度引擎中的资源有限的情况下,那么具有较高优先级的触发器先触发. 需要将配置文件中的org.qua ...

  2. 企业级任务调度框架Quartz(9) Quartz之作业触发器Trigger

    前序:      我们已经大概对Quartz的基本有了一个大概的认识:现在我们将要逐渐对Quartz的各个重要组件进行学习:前面已经对job进行了详细讲解,现在我们来认识下它的一个重要兄弟,没有它,作 ...

  3. Quartz.net Trigger触发器下 Cron表达式的格式

    有位博主写的不错,样式标准好理解,借鉴下. foamflower 1.   CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] ...

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

    1.Quartz中的触发器TriggerJob 包含了要执行任务的逻辑,但是 Job 对何时该执行却一无所知.这个事情留给了 Trigger.Quartz Trigger 继承了抽象的 org.qua ...

  5. [Quartz笔记]玩转定时调度

    简介 Quartz是什么? Quartz是一个特性丰富的.开源的作业调度框架.它可以集成到任何Java应用. 使用它,你可以非常轻松的实现定时任务的调度执行. Quartz的应用场景 场景1:提醒和告 ...

  6. 使用Spring整合Quartz轻松完成定时任务

    一.背景 上次我们介绍了如何使用Spring Task进行完成定时任务的编写,这次我们使用Spring整合Quartz的方式来再一次实现定时任务的开发,以下奉上开发步骤及注意事项等. 二.开发环境及必 ...

  7. quartz配置文件详解

    quartz配置文件详解(转载)     quartz学习总结: 一.关于job:    用Quartz的行话讲,作业是一个执行任务的简单Java类.任务可以是任何Java代码.只需你实现org.qu ...

  8. Spring-----定时任务Quartz配置

    第一种,作业类继承自特定的基类:org.springframework.scheduling.quartz.QuartzJobBean. 第一步:定义作业类 import org.quartz.Job ...

  9. Spring任务调度之Quartz

    一.Quartz作业类的继承方式来讲,可以分为两类: 作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.Quart ...

随机推荐

  1. Spring 数据源配置一:单一数据源

    最近遇到一个项目,需要访问都多个数据源,并且数据库是不同厂商(mysql,  sqlserver). 所以对此做了一些研究,这里咱们采用渐进的方式来展开,先谈谈单一数据源配置.(稍后有时间会陆续补充其 ...

  2. hdu 4815 Little Tiger vs. Deep Monkey

    概率dp,有点像背包的做法: dp[i][j]代表前i个数组成的j数的概率为多少 #include<cstdio> #include<cstring> #define maxn ...

  3. WCF 消息压缩性能问题及解决方法

    最近使用WCF作为通迅框架开发一套信息系统,系统使用传统C/S框架,系统有可能会部署在互联网上,因此决定对传输的数据进行GZIP压缩,原来在使用.NET Remoting时,可以使用插入自定义的Cha ...

  4. 想使用 MongoDB ,你应该了解这8个方面!

    应用性能高低依赖于数据库性能,MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案.MongoDB 是一个介于关系数据库和非关 ...

  5. windows 安装mysql的时候最后执行一直停留在Write configuration file

    出现原因:MySQL安装路径出现中文,特殊字符.或是重新安装MySQL后经常遇到.前者是路径不允许出现中文名称,后者是由于卸载不干净. 我就是因为重新安装了MySQL,卸载不干净,才会导致之后这个错误 ...

  6. 李洪强漫谈iOS开发[C语言-022]-算术运算符

  7. 商务部公开微软持有的Android技术专利

    微软与众多Android厂商签署了专利授权协议,但从来没有公开它持有多少项Android技术专利.出人意料的是,为了收购诺基亚手机业务,微软今年4月递交到中国商务部的文件中完整公开了它的Android ...

  8. HANA内存数据库与oracle数据库的性能比较

    链接: http://wenku.it168.com/redian/hana/ 1.传统磁盘数据库的基本访问模式.为了提高性能在产品和应用之间会加入缓存的内存区域.传统数据库性能瓶颈主要出现在一个是内 ...

  9. windows 上rails3.2 + ruby1.9环境搭建

    题外话:本文是通过参考网友资料,亲自尝试过后写的,有不对之处,还请网友指正! 1.搭建环境 准备ruby1.9.3 下载地址: 下载地址:http://rubyforge.org/frs/?group ...

  10. Codeforces Round #195 (Div. 2)

    记次CF吧 1题...B题..因为循环的i没设成long long 却参与了运算 结果就悲剧了 一直交 一直挂 ..上题 A 水.. 第一次少了个空格还.. #include <iostream ...