Quartz 基础知识及示例代码(一)

Quartz 是一个完全由 Java 编写的开源企业级作业调度框架。Quartz允许开发人员根据时间间隔来调度作业。它实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。
本文地址:http://blog.csdn.net/shanglianlm/article/details/71090476

Quartz的基础知识:

1) Job(调度器): 是一个接口,只定义一个方法execute(JobExecutionContext context),execute方法中定义所需要执行的任务。Job运行时的信息保存在JobDataMap实例中,调度应用信息保存在JobExecutionContext类中。

2) JobDetail(任务): JobDetail描述Job的实现类及其它相关信息,如Job名字、描述、关联监听器等,Quartz每次调度Job时接收一个Job实现类。

3)Trigger(触发器): 是一个类,描述触发Job执行的时间触发规则。主要有SimpleTrigger和CronTrigger这两个子类。
如果要求以固定时间间隔执行调度或者只调度一次时,选择SimpleTrigger,否则选择CronTrigger,CronTrigger可以使用Cron表达式配置出复杂的时间调度规则,CronTrigger表达式见Quartz Cron 表达式(二)

4)Calendar:org.quartz.Calendar是一些日历特定时间点的集合, 一个Trigger可以和多个Calendar关联。

5) Scheduler: 代表一个Quartz的独立运行容器, Trigger和JobDetail可以注册到Scheduler中, 两者在Scheduler中拥有各自的组及名称, 组及名称是Scheduler查找定位容器中某一对象的依据, Trigger的组及名称必须唯一, JobDetail的组和名称也必须唯一。Scheduler定义了多个接口方法, 允许外部通过组及名称访问和控制容器中Trigger和JobDetail。
6) ThreadPool: Scheduler使用一个线程池作为任务运行的基础设施,任务通过共享线程池中的线程提高运行效率。

示例代码:
QuartzJob.java

public class QuartzJob implements Job{

    public void execute(JobExecutionContext arg0) throws JobExecutionException {

        System.out.println("I am QuartzJob!");  
    }

}

QuartzDemo.java

public class QuartzDemo {

    public static void main(String[] args) {

        // 通过schedulerFactory获取一个调度器
        SchedulerFactory schedulerfactory = new StdSchedulerFactory();
        Scheduler scheduler = null;
        try {
            // 通过schedulerFactory获取一个调度器
            scheduler = schedulerfactory.getScheduler();

            // 创建jobDetail实例,绑定Job实现类
            // 指明job的名称,所在组的名称,以及绑定job类
            JobDetail job = JobBuilder.newJob(QuartzJob.class).withIdentity("JobName", "JobGroupName").build();

            // 定义调度触发规则

            // SimpleTrigger
             Trigger trigger=TriggerBuilder.newTrigger().withIdentity("SimpleTrigger","SimpleTriggerGroup")
             .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(3).withRepeatCount(6)).startNow().build();

            // corn表达式 每五秒执行一次
            //Trigger trigger = TriggerBuilder.newTrigger().withIdentity("CronTrigger1", "CronTriggerGroup")
            //      .withSchedule(CronScheduleBuilder.cronSchedule("*/5 * * * * ?")).startNow().build();

            // 把作业和触发器注册到任务调度中
            scheduler.scheduleJob(job, trigger);

            // 启动调度
            scheduler.start();

            try {
                Thread.sleep(100000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            // 停止调度
            scheduler.shutdown();

        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mingo_敏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值