浅谈Quartz的Job和JobDetails

一 点睛

1 Job定义

实现业务逻辑的任务接口。

Job接口非常容易实现,只有一个execute方法,类似TimeTask的run方法,在里面编写业务逻辑。

2 Job接口源码

public interface Job {
    void execute(JobExecutionContext context)
        throws JobExecutionException;

}

3 Job实例在Quautz中的生命周期

每次调度器执行job时,它在调用execute方法前会创建一个新的job实例。

当调用完后,关闭的job对象实例会被释放,释放的实例会被垃圾回收机制回收。

4 浅谈JobDetail

JobDetail为Job实例提供了许多设置属性,以及JobDataMap成员变量属性,它用来存储特定Job实例的状态信息,调度器需要借助JobDetail对象来添加Job实例。

下面4个是JobDetail的重要属性

name、group、jobClass、jobDataMap

二 实战

1 启动类

package com.quartz;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import java.text.SimpleDateFormat;
import java.util.Date;

public class HelloScheduler {

    public static void main(String[] args) throws SchedulerException {
        //创建一个JobDetail实例, 将该实例与hellojob class 绑定
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                .withIdentity("myJob").build();
        //演示JobDetail的重要属性
        System.out.println("jobDetail's name:"+jobDetail.getKey().getName());
        System.out.println("jobDetail's group:"+jobDetail.getKey().getGroup());
        System.out.println("jobDetail's jobclass:"+jobDetail.getJobClass().getName());

        //创建一个Trigger实例,定义该job立即执行,并且每隔两秒钟重复执行一次
        Trigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger","group1")
                .startNow().withSchedule(
                        SimpleScheduleBuilder.simpleSchedule()
                        .withIntervalInSeconds(2).repeatForever()
                ).build();
        //创建Schedule实例
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();
        scheduler.start();
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("Current Time is:" + simpleDateFormat.format(date));
        scheduler.scheduleJob(jobDetail,trigger);
    }
}

2 Job类

package com.quartz;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import java.text.SimpleDateFormat;
import java.util.Date;


public class HelloJob implements Job{

    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        //打印当前执行的时间
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("Current Exec Time is:" + simpleDateFormat.format(date));
        //编写具体的业务逻辑
        System.out.println("Hello World!");
    }
}

三 运行结果

jobDetail's name:myJob

jobDetail's group:DEFAULT

jobDetail's jobclass:com.quartz.HelloJob

你可能感兴趣的:(Quartz)