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

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

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

  1. package com.f139.frame.job;
  2.  
  3. import static org.quartz.JobBuilder.newJob;
  4. import static org.quartz.TriggerBuilder.newTrigger;
  5. import static org.quartz.CronScheduleBuilder.cronSchedule;
  6.  
  7. import java.text.ParseException;
  8. import java.util.Collection;
  9. import java.util.HashMap;
  10. import java.util.Map;
  11.  
  12. import org.nutz.ioc.Ioc;
  13. import org.quartz.JobDataMap;
  14. import org.quartz.JobDetail;
  15. import org.quartz.JobKey;
  16. import org.quartz.Scheduler;
  17. import org.quartz.SchedulerException;
  18. import org.quartz.SchedulerFactory;
  19. import org.quartz.TriggerKey;
  20. import org.quartz.impl.StdSchedulerFactory;
  21.  
  22. import com.f139.frame.pojo.factory.Template;
  23.  
  24. public class CreateJob {
  25.  
  26. private static SchedulerFactory sf = new StdSchedulerFactory();
  27.  
  28. public static void createTemplateJob(Map<Integer, Template> map, Ioc ioc) {
  29. Scheduler sched;
  30. try {
  31. sched = sf.getScheduler();
  32.  
  33. // ioc参数,将ioc传递到job中
  34. Map<String, Object> params = new HashMap<String, Object>();
  35. params.put("ioc", ioc);
  36. // 获取所有模板
  37. Collection<Template> templates = map.values();
  38. for (Template template : templates) {
  39. if (template.getIntervalTime() > 0) {
  40. // 将当前模板ID传入job中
  41. params.put("templateID", template.getTemplateID());
  42. // 创建作业
  43. JobDetail jobDetail = newJob(TemplateJob.class).withIdentity(new JobKey("templateJob_" + template.getTemplateID(), "template")).usingJobData(
  44. new JobDataMap(params)).build();
  45. // 创建触发器,并将触发器加入到作业中
  46. sched.scheduleJob(jobDetail, newTrigger().withIdentity(new TriggerKey("between7and19_" + template.getTemplateID(), "template")).withSchedule(
  47. cronSchedule("0 0/1 7-19 * * ?")).forJob(jobDetail).build());
  48. sched.scheduleJob(newTrigger().withIdentity(new TriggerKey("between0and7_" + template.getTemplateID(), "template")).withSchedule(
  49. cronSchedule("0 0/5 0-7 * * ?")).forJob(jobDetail).build());
  50. sched.scheduleJob(newTrigger().withIdentity(new TriggerKey("between19and23_" + template.getTemplateID(), "template")).withSchedule(
  51. cronSchedule("0 0/5 19-23 * * ?")).forJob(jobDetail).build());
  52. }
  53. }
  54. sched.start();
  55. } catch (SchedulerException e) {
  56. e.printStackTrace();
  57. } catch (ParseException e) {
  58. e.printStackTrace();
  59. }
  60.  
  61. }
  62. }

  

job处理类

  1. package com.f139.frame.job;
  2.  
  3. import java.util.Map;
  4.  
  5. import org.nutz.dao.Dao;
  6. import org.nutz.ioc.Ioc;
  7. import org.quartz.Job;
  8. import org.quartz.JobExecutionContext;
  9. import org.quartz.JobExecutionException;
  10.  
  11. import com.f139.frame.freemarker.FreemarkerUtile;
  12. import com.f139.frame.pojo.factory.Log;
  13. import com.f139.frame.pojo.factory.Template;
  14. import com.f139.frame.system.LocalCache;
  15. import com.f139.frame.util.DateUtil;
  16.  
  17. public class TemplateJob implements Job {
  18.  
  19. private Dao dao = null;
  20. private Ioc ioc = null;
  21.  
  22. @Override
  23. @SuppressWarnings("unchecked")
  24. public void execute(JobExecutionContext context) throws JobExecutionException {
  25. Map<String, Object> params = null;
  26. Template template = null;
  27. FreemarkerUtile freemarkerUtile = null;
  28. try {
  29. // 获取参数
  30. params = context.getJobDetail().getJobDataMap();
  31. // 获取ioc
  32. ioc = (Ioc) params.get("ioc");
  33.  
  34. // 获取Dao
  35. dao = ioc.get(NutDao.class,"dao");
  36.  
  37. // 获取当前模板
  38. template = LocalCache.selectTemplateByID.get(Integer.parseInt(params.get("templateID").toString()));
  39. // 获取FreemarkerUtile
  40. freemarkerUtile = ioc.get(FreemarkerUtile.class, "freemarkerUtile");
  41. // 创建文件
  42. freemarkerUtile.createHtml(template.getTemplateContent(), template.getFileUrl(), null);
  43.  
  44. } catch (Exception e) {
  45. FailLog("模板" + template.getTemplateName() + "在" + DateUtil.getNowString() + "生成静态文件时发生异常!");
  46. }
  47.  
  48. }
  49.  
  50. public void FailLog(String message) {
  51. Log log = new Log();
  52. log.setUserName("admin");
  53. log.setLogClass("html");
  54. log.setLogLevel("9");
  55. log.setLogMessage(message);
  56. log.setUpdateTime(DateUtil.getNowString());
  57. dao.insert(log);
  58. }
  59.  
  60. }

  

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. underscore vs jquery

    http://wordpress.tv/2013/06/23/k-adam-white-underscore-and-backbone-jquerys-new-friends/ http://www. ...

  2. jQuery.Validate自定义规程的使用案例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. http://www.itpub.net/thread-1778530-1-1.html

    http://www.itpub.net/thread-1778530-1-1.html

  4. KMP的next[]数组

    KMP是众多字符串问题的基础 理解next数组尤为重要 next又称前缀数组 是 它所处位置的前一个位置的元素 与 该链 链首开始 几个元素相匹配(即相同) 举个实例来说明: next对应的是该位置的 ...

  5. DHTMLX 前端框架 建立你的一个应用程序 教程(十)--保存表单中的数据

    保存表单中的数据 现在我们所要做的是 当用户点击提交按钮的时候  我们将表单中的数据进行保存操作. 我们可以使用dhtmlxDataProcessor. 来进行操作.它是一个数据组件,可以提供与服务器 ...

  6. 基于Qt5.x的QCA加解密开源项目的编译过程

    记录一下Qt5.x下的QCA的编译过程 需要注意的几点 针对windows环境 1.编译QCA源码前,必须先安装openssl二进制文件 2.需要安装好vs2008等 ( 64-bit Visual ...

  7. C++类中静态变量和静态方法使用介绍!

    原链接:http://www.ecoviews.cn/net/archives/216.html 静态成员的提出是为了解决数据共享的问题.实现共享有许多方法,如:设置全局性的变量或对象是一种方法.但是 ...

  8. Ember.js demo2

    <!DOCTYPE html> <html> <head> <script src="http://code.jquery.com/jquery-1 ...

  9. Android开发之PackageManager类

    PackageManger,可以获取到手机上所有的App,并可以获取到每个App中清单文件的所有内容. 设置应用程序版本号在应用程序的manifest文件中定义应用程序版本信息.2个必须同时定义的属性 ...

  10. WebChart网页局域网聊天系列(一):ActiveX插件编写

    第一步:创建ActiveX控件类库,在解决方案中右击添加Window窗体控件库 在该类库属性中,设置 使程序集COM可见,同时设置为COM互操作注册 另外在自动生成的文件中AssemblyInfo.c ...