Quartz 多個觸發器

jopen 9年前發布 | 1K 次閱讀 Java Quartz

生成靜態html文件,7點到19點每5分鐘生成一次,其他時間1小時生成一次。

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

}

}</pre>

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

}</pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!