zoukankan      html  css  js  c++  java
  • 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);
        }
     
    }
    

      

  • 相关阅读:
    批量创建账号脚本
    shell 批量创建_备份 mysql 数据库 表
    优化chkconfig
    cut 命令
    Shell for 循环
    while 读取文件内容
    生成随机数
    linux 资源管理
    shell 脚本后台运行知识
    while 语句
  • 原文地址:https://www.cnblogs.com/a757956132/p/4823269.html
Copyright © 2011-2022 走看看