摘要:多作业例子在这个例子中,我们将介绍如何通过多个作业。在调度框架中,每个作业将被连接到一个唯一的触发,并且由调度器运行它。备注说明在中,一个触发器触发多个作业是不可以的。第一步创建个作业,,和。
多作业例子
在这个例子中,我们将介绍如何通过Quartz API 多个作业。在Quartz调度框架中,每个作业将被连接到一个唯一的触发,并且由调度器运行它。
备注说明:在 Quartz 中,一个触发器触发多个作业是不可以的。
第一步:创建3个作业,JobA,JobB和JobC。JobA.class
import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class JobA implements Job{ @Override public void execute(JobExecutionContext context) throws JobExecutionException { // TODO Auto-generated method stub System.out.println("Job A is runing //every 5 seconds "); } }
JobB.class
import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class JobB implements Job{ @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { // TODO Auto-generated method stub System.out.println("Job B is runing"); } }
JobC.class
import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class JobC implements Job{ @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { // TODO Auto-generated method stub System.out.println("Job C is runing"); } }第二步:使用QuartzAPI声明上述3个作业,分配它们到特定触发器并调度它。
import org.quartz.CronScheduleBuilder; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.JobKey; import org.quartz.Scheduler; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; // 这里引入自己的Job 的地址 import com.demo.quartz.job.JobA; import com.demo.quartz.job.JobB; import com.demo.quartz.job.JobC; public class CronTriggerMultiJob { public static void main(String[] args) throws Exception { JobKey jobKeyA = new JobKey("JobA", "group1"); JobDetail jobA = JobBuilder.newJob(JobA.class).withIdentity(jobKeyA) .build(); JobKey jobKeyB = new JobKey("JobB", "group1"); JobDetail jobB = JobBuilder.newJob(JobB.class).withIdentity(jobKeyB) .build(); JobKey jobKeyC = new JobKey("JobC", "group1"); JobDetail jobC = JobBuilder.newJob(JobC.class).withIdentity(jobKeyC) .build(); Trigger trigger1 = TriggerBuilder .newTrigger() .withIdentity("dummyTriggerName1", "group1") .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) .build(); Trigger trigger2 = TriggerBuilder .newTrigger() .withIdentity("dummyTriggerName2", "group1") .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) .build(); Trigger trigger3 = TriggerBuilder .newTrigger() .withIdentity("dummyTriggerName3", "group1") .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) .build(); Scheduler scheduler = new StdSchedulerFactory().getScheduler(); scheduler.start(); scheduler.scheduleJob(jobA, trigger1); scheduler.scheduleJob(jobB, trigger2); scheduler.scheduleJob(jobC, trigger3); } }
输出的结果如下:
Job A is runing //every 5 seconds Job B is runing Job C is runing Job A is runing //every 5 seconds Job B is runing Job C is runing监听例子
在这个例子中,我们回学到如何创建一个 JobListener, 跟踪运行工作状态在作业完成。
第一步:创建一个作业,并在作业中抛出一个异常(JobExecutionException)HelloJob.java
import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class HelloJob implements Job{ @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { // TODO Auto-generated method stub System.out.println("Hello Quartz!"); throw new JobExecutionException("Testing Exception"); } }第二步:创建监听
HelloJobListener.java
import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.JobListener; public class HelloJobListener implements JobListener { public static final String LISTENER_NAME = "dummyJobListenerName"; @Override public String getName() { return LISTENER_NAME; // 必须要返回一个监听的名字 } /** * 当 job 执行的时候会调用这个方法 */ @Override public void jobExecutionVetoed(JobExecutionContext context) { String jobName = context.getJobDetail().getKey().toString(); System.out.println("jobToBeExecuted"); System.out.println("Job : " + jobName + " is going to start..."); } @Override public void jobToBeExecuted(JobExecutionContext context) { System.out.println("jobExecutionVetoed"); } /** * job 执行后运行 */ @Override public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) { System.out.println("jobWasExecuted"); String jobName = context.getJobDetail().getKey().toString(); System.out.println("Job : " + jobName + " is finished..."); if (!jobException.getMessage().equals("")) { System.out.println("Exception thrown by: " + jobName + " Exception: " + jobException.getMessage()); } } }第三步:测试执行
HelloJobListenerTest.java
import org.quartz.CronScheduleBuilder; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.JobKey; import org.quartz.Scheduler; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; import org.quartz.impl.matchers.KeyMatcher; public class HelloJobListenerTest { public static void main(String[] args) throws Exception { // 新建一个jobKey JobKey jobKey = new JobKey("dummyJobName", "group1"); // name dummyJobName group group1 JobDetail job = JobBuilder.newJob(HelloJob.class).withIdentity(jobKey) .build(); Trigger trigger = TriggerBuilder .newTrigger() .withIdentity("dummyTriggerName", "group1") .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) // 每5秒执行一次 .build(); Scheduler scheduler = new StdSchedulerFactory().getScheduler(); // 添加 监听到 jobKey scheduler.getListenerManager().addJobListener(new HelloJobListener(), KeyMatcher.keyEquals(jobKey)); scheduler.start(); scheduler.scheduleJob(job, trigger); } }
输出结果
jobExecutionVetoed Hello Quartz! 五月 26, 2018 3:23:15 下午 org.quartz.core.JobRunShell run 信息: Job group1.dummyJobName threw a JobExecutionException: org.quartz.JobExecutionException: Testing Exception at com.wq.study.quartz.HelloJob.execute(HelloJob.java:14) at org.quartz.core.JobRunShell.run(JobRunShell.java:202) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) jobWasExecuted Job : group1.dummyJobName is finished... Exception thrown by: group1.dummyJobName Exception: Testing Exception
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/71247.html
摘要:触发器也可以给予名称和放置在组中,以方便地将它们调度内组织。作业可以被添加到所述调度器一次,而是具有多个触发器注册。调度类链接工作和触发器到一起,并执行它。 简介 Quartz是一个开源的作业调度框架,可以让计划的程序任务一个预定义的日期和时间运行。Quartz可以用来创建简单或复杂的日程安排执行几十,几百,甚至是十万的作业数。官方链接,戳这里 Quartz是什么? 作业调度库 Qua...
摘要:分类中共包含有种触发器。建立一个触发器,每隔一分钟,每天上午点至下午点之间建立一个触发器,将在每天上午执行第一种实现方式第二种实现方式建立一个触发器,将在星期三上午在系统默认值之外执行第一种方式第二种方式 Trigger分类 Quartz中共包含有4种触发器。 常用的是: SimpleTrigger 和 CronTrigger。不常用的是:CalendarIntervalTrigger...
摘要:请注意,触发器将不会在上午点开始,仅在,,和请注意,一些调度要求太复杂,无法用单一触发表示例如每上午至之间每分钟,下午至晚上点之间每分钟一次。在这种情况下的解决方案是简单地创建两个触发器,并注册它们来运行相同的作业。 表达式说明 Cron-Expressions 用于配置 CronTrigger的实例。Cron Expressions 是由七个子表达式组成的字符串,用于描述日程表的各个...
摘要:例如在周上设置表示周一三五触发用于递增触发。例如在周上设置,表示本月的最后一个星期五表示离指定日期最近那个工作日周一至周五,例如在日字段上设置,表示离每月号最近的那个工作日触发。相关例子代码较简单的定时任务调度工具利用集成 笔记来源:IMOOC Java Quartz Quartz 简介 OpenSymphony 提供的强大的开源任务调度框架 纯 Java 实现,精细控制排程 Q...
摘要:注意为了共享在同一个中的,我们需要在上面这个实现类上加入和注解,详见定时任务二多线程并发执行与数据共享。捕获异常,取消所有触发器在我们捕获异常时,可以调用取消所有与这个作业有关的触发器。 版权声明:本文由吴仙杰创作整理,转载请注明出处:https://segmentfault.com/a/1190000009141079 1. 作业异常 org.quartz.JobExecut...
阅读 2223·2021-11-22 09:34
阅读 1334·2021-10-11 10:59
阅读 4425·2021-09-22 15:56
阅读 3269·2021-09-22 15:08
阅读 3400·2019-08-30 14:01
阅读 772·2019-08-30 11:16
阅读 1128·2019-08-26 13:51
阅读 2905·2019-08-26 13:43