学习笔记_Quartz作业调度框架,使用corn表达式

本文深入探讨了Quartz作业的核心实现方法及触发机制。每项QuartzJob都需实现org.quartz.Job接口并重写execute()方法。在触发时,Quartz调度器生成Job实例并调用execute()方法,此过程不关注执行结果,仅捕获JobExecutionException异常。通过JobExecutionContext上下文,可以访问调度器信息、Job细节及自定义属性。

想深耕嵌入式?这个专辑值得收藏

MCU、FPGA、工控、传感器一站式学习,实战项目直接抄

每一个 Quartz Job 必须有一个实现了 org.quartz.Job 接口的具体类。这个接口仅有一个要你在 Job 中实现的方法,execute(),方法 execute() 的原型如下:
public void execute(JobExecutionContext context) throws JobExecutionException;

当 Quartz 调度器确定到时间要激发一个 Job 的时候,它就会生成一个 Job 实例,并调用这个实例的 execute() 方法。调度器只管调用 execute() 方法,而不关心执行的结果,除了在作业执行中出问题抛出的 org.quartz.JobExecutionException 异常。

当 Quartz 调用 execute() 方法,会传递一个 org.quartz.JobExecutionContext 上下文变量,里面封装有 Quartz 的运行时环境和当前正执行的 Job。通过 JobexecutionContext,你可以访问到调度器的信息,作业和作业上的触发器的信息,还有更多更多的信息。在代码中,JobExecutionContext 被用来访问 org.quartz.JobDetail 类,JobDetail 类持有 Job 的详细信息,包括为 Job 实例指定的名称,Job 所属组,Job 是否被持久化(易失性),和许多其他感兴趣的属性。

JobDetail 又持有一个指向 org.quartz.JobDataMap 的引用。JobDataMap 中有为指定 Job 配置的自定义属性。

以下是Quartz使用corn表达式的一个简单示例。


public class HelloJob implements Job {

public void execute(JobExecutionContext context)
throws JobExecutionException {

//从JobExecutionContext中获取JobDetail信息,包括JobDataMap中的参数信息
JobKey key = context.getJobDetail().getKey();
JobDataMap dataMap = context.getJobDetail().getJobDataMap();

String jobPerson = dataMap.getString("jobPerson");
float jobParam = dataMap.getFloat("jobParam");

System.out.println(new Date()+",Instance " + key + " of HelloJob");
System.out.println(jobPerson+" says Hello World!,and param is: " + jobParam);
}

}



public class Demo1 {

public static void main(String[] args) throws Exception{
//从工厂中取出调度器Scheduler
SchedulerFactory schedFact = new StdSchedulerFactory();
Scheduler sched = schedFact.getScheduler();

//启动调度器,也可以在job和trigger设置好后启动
sched.start();

//定义一个作业,并绑定到HelloJob上,命名为myJob,分组为group1,usingJobData为传递参数
JobDetail job = newJob(HelloJob.class)
.withIdentity("myJob", "group1")
.usingJobData("jobPerson", "jk")
.usingJobData("jobParam", 3.141f)
.build();

//定义一个触发器,命名为myTrigger,分组为group1,使用corn时间表达式
Trigger trigger = newTrigger()
.withIdentity("myTrigger", "group1")
.withSchedule(cronSchedule("0/10 * * * * ?"))//"0/10 * * * * ?"为corn表达式
//.forJob("myJob", "group1") //貌似这一句不要也可以
.build();

// Tell quartz to schedule the job using our trigger
sched.scheduleJob(job, trigger);

}
}


附件为demo工程。

想深耕嵌入式?这个专辑值得收藏

MCU、FPGA、工控、传感器一站式学习,实战项目直接抄

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。 Quartz的优势: 1、Quartz是一个任务调度框架(库),它几乎可以集成到任何应用系统中。 2、Quartz是非常灵活的,它让您能够以最“自然”的方式来编写您的项目的代码,实现您所期望的行为 3、Quartz是非常轻量级的,只需要非常少的配置 —— 它实际上可以被跳出框架使用,如果你的需求是一些相对基本的简单的需求的话。 4、Quartz具有容错机制,并且可以在重启服务的时候持久化(”记忆”)你的定时任务,你的任务也不会丢失。 5、可以通过Quartz,封装成自己的分布式任务调度,实现强大的功能,成为自己的产品。6、有很多的互联网公司也都在使用Quartz。比如美团 Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企业级应用更好的使用Quartz进行任务的调度。   课程说明:在我们的日常开发中,各种大型系统的开发少不了任务调度,简单的单机任务调度已经满足不了我们的系统需求,复杂的任务会让程序猿头疼, 所以急需一套专门的框架帮助我们去管理定时任务,并且可以在多台机器去执行我们的任务,还要可以管理我们的分布式定时任务。本课程从Quartz框架讲起,由浅到深,从使用到结构分析,再到源码分析,深入解析Quartz、Spring+Quartz,并且会讲解相关原理, 让大家充分的理解这个框架框架的设计思想。由于互联网的复杂性,为了满足我们特定的需求,需要对Spring+Quartz进行二次开发,整个二次开发过程都会进行讲解。Spring被用在了越来越多的项目中, Quartz也被公认为是比较好用的定时器设置工具,学完这个课程后,不仅仅可以熟练掌握分布式定时任务,还可以深入理解大型框架的设计思想。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值