訊息驅動批次規則引擎 (1)
設計情境: 回首頁
package com.progria; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.Trigger; import org.quartz.impl.StdSchedulerFactory; import static org.quartz.JobBuilder.*; import static org.quartz.TriggerBuilder.*; import static org.quartz.CronScheduleBuilder.*; public class BatchRules { String jobName, jobGroup, jobParam; public BatchRules(String jobName, String jobGroup, String jobParam) { this.jobName = jobName; this.jobGroup = jobGroup; this.jobParam = jobParam; } public void batchJob(Scheduler myScheduler, int timeElapse) { try { JobDetail myJob = newJob(BizRuleSet.class) .withIdentity(this.jobName, this.jobGroup) .usingJobData("jobParam", this.jobParam).build(); String triggerScript = String.format("0/%d * * * * ?", timeElapse); Trigger myTrigger = newTrigger() .withIdentity(this.jobName, this.jobGroup) .withSchedule(cronSchedule(triggerScript)).build(); myScheduler.scheduleJob(myJob, myTrigger); } catch (SchedulerException e) { e.printStackTrace(); } } public static void main(String[] args) { int WAIT_SECONDS = 90; String mqParams = "localhost|hello2"; if (args.length > 0) { try { WAIT_SECONDS = Integer.parseInt(args[0]); } catch (Exception e) { e.printStackTrace(); } } if (args.length > 1) { mqParams = (args[1]); } BatchRules myBatchRules = new BatchRules("job1", "jobGroup1", mqParams); try { Scheduler myScheduler = StdSchedulerFactory.getDefaultScheduler(); Runtime.getRuntime().addShutdownHook( new ShutdownScheduler(myScheduler)); myScheduler.start(); myBatchRules.batchJob(myScheduler, WAIT_SECONDS); for (; !myScheduler.isShutdown();) { Thread.sleep(WAIT_SECONDS * 1000L); } myScheduler = null; } catch (Exception e) { e.printStackTrace(); } myBatchRules = null; } }