学习笔记_Quartz作业调度框架,使用corn表达式 博客分类: 学习笔记 Quartzcorn作业调度定时任务
程序员文章站
2024-03-23 11:13:34
...
每一个 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表达式的一个简单示例。
附件为demo工程。
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工程。