关闭

Quartz学习——Quartz简单入门Demo(二)

标签: quartzDemoquartz示例quartz入门quartz基础quartz框架
6942人阅读 评论(12) 收藏 举报
分类:

要学习Quartz框架,首先大概了解了Quartz的基本知识后,在通过简单的例子入门,一步一个脚印的走下去。
下面介绍Quartz入门的示例,由于Quartz的存储方式分为RAM和JDBC,分别对这两种进行简单的说明。并附上代码!
首先需要添加Quartz的Jar包 ,我使用的是quartz.2.2.1版本!
Demo代码下载地址quartz_demo

<!-- quartz -->
    <dependency>
         <groupId>org.quartz-scheduler</groupId>
         <artifactId>quartz</artifactId>
         <version>2.2.1</version>
    </dependency>
    <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz-jobs</artifactId>
            <version>2.2.1</version>
        </dependency>

1:RAM方式
要测试RAMdemo的代码,请先删除demo中这个quartz.properties文件,或者重命名!否则会测试不成功!
(1):Job

package com.dufy.learn;

import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class RAMJob implements Job{

    private static Logger _log = LoggerFactory.getLogger(RAMJob.class);

    @Override
    public void execute(JobExecutionContext arg0) throws JobExecutionException {

        _log.info("Say hello to Quartz" + new Date());
    }

}

(2):QuartzTest

package com.dufy.learn;

import java.util.Date;

import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * This is a RAM Store Quartz!
 * @author dufy
 * @date 2017.02.04
 *
 */
public class RAMQuartz {

    private static Logger _log = LoggerFactory.getLogger(RAMQuartz.class);

    public static void main(String[] args) throws SchedulerException {
        //1.创建Scheduler的工厂
        SchedulerFactory sf = new StdSchedulerFactory();
        //2.从工厂中获取调度器实例
        Scheduler scheduler = sf.getScheduler();


        //3.创建JobDetail
        JobDetail jb = JobBuilder.newJob(RAMJob.class)
                .withDescription("this is a ram job") //job的描述
                .withIdentity("ramJob", "ramGroup") //job 的name和group
                .build();

        //任务运行的时间,SimpleSchedle类型触发器有效
        long time=  System.currentTimeMillis() + 3*1000L; //3秒后启动任务
        Date statTime = new Date(time);

        //4.创建Trigger
            //使用SimpleScheduleBuilder或者CronScheduleBuilder
        Trigger t = TriggerBuilder.newTrigger()
                    .withDescription("")
                    .withIdentity("ramTrigger", "ramTriggerGroup")
                    //.withSchedule(SimpleScheduleBuilder.simpleSchedule())
                    .startAt(statTime)  //默认当前时间启动
                    .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")) //两秒执行一次
                    .build();

        //5.注册任务和定时器
        scheduler.scheduleJob(jb, t);

        //6.启动 调度器
        scheduler.start();
        _log.info("启动时间 : " + new Date());

    }
}

运行结果:
SimpleScheduleBuilder:

这里写图片描述

CronScheduleBuilder:

这里写图片描述

2.JDBC方式

使用jdbc方式,就要配置quartz.properties文件,并且在开始的时候在数据库中新增表!
我使用的数据库是mysql,数据库中表在quartz_demo里面有,需要的请在里面下载!
运行 tables_db2_v8.sql 这个文件。

#JDBC驱动
org.quartz.dataSource.qzDS.driver:com.mysql.jdbc.Driver
org.quartz.dataSource.qzDS.URL:jdbc:mysql://localhost:3306/quartz_test
org.quartz.dataSource.qzDS.user:root
org.quartz.dataSource.qzDS.password:root
org.quartz.dataSource.qzDS.maxConnection:10

(1)MyJob

package com.dufy.jdbctest;

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

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyJob implements Job{
    private static final Logger log = LoggerFactory.getLogger(MyJob.class);

    @Override
    public void execute(JobExecutionContext context)throws JobExecutionException {
        log.info("MyJob  is start ..................");

        log.info("Hello quzrtz  "+
                new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ").format(new Date()));

        log.info("MyJob  is end .....................");
    }



}

(2)QuartzJdbcTest

package com.dufy.jdbctest;

import java.text.ParseException;
import java.util.List;

import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;

public class QuartzJdbcTest {

    public static void main(String[] args) throws SchedulerException,
            ParseException {
        startSchedule();
        //resumeJob();
    }
    /**
     * 开始一个simpleSchedule()调度
     */
    public static void startSchedule() {
        try {
            // 1、创建一个JobDetail实例,指定Quartz
            JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
            // 任务执行类
                    .withIdentity("job1_1", "jGroup1")
                    // 任务名,任务组
                    .build();


            //触发器类型
            SimpleScheduleBuilder builder = SimpleScheduleBuilder
                    // 设置执行次数
                    .repeatSecondlyForTotalCount(5);

            //CronScheduleBuilder builder = CronScheduleBuilder.cronSchedule("0/2 * * * * ?");
            // 2、创建Trigger
            Trigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity("trigger1_1", "tGroup1").startNow()
                    .withSchedule(builder)
                    .build();

            // 3、创建Scheduler
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
            scheduler.start();
            // 4、调度执行
            scheduler.scheduleJob(jobDetail, trigger);
            try {
                Thread.sleep(60000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            //关闭调度器
            scheduler.shutdown();

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

    /**
     * 从数据库中找到已经存在的job,并重新开户调度
     */
    public static void resumeJob() {
        try {

            SchedulerFactory schedulerFactory = new StdSchedulerFactory();
            Scheduler scheduler = schedulerFactory.getScheduler();
            JobKey jobKey = new JobKey("job1_1", "jGroup1");
            List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey);
            //SELECT TRIGGER_NAME, TRIGGER_GROUP FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?
            // 重新恢复在jGroup1组中,名为job1_1的 job的触发器运行
            if(triggers.size() > 0){
                for (Trigger tg : triggers) {
                    // 根据类型判断
                    if ((tg instanceof CronTrigger) || (tg instanceof SimpleTrigger)) {
                        // 恢复job运行
                        scheduler.resumeJob(jobKey);
                    }
                }
                scheduler.start();
            }

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

        }
    }
}

运行结果:
这里写图片描述

控制台打印:
这里写图片描述

Cron和Simple类型,Simple类型的如果JobDetail没有设置.storeDurably(true),则job在运行完成之后会在数据库中删除!


Quartz专栏系列

1.Quartz学习——Quartz大致介绍(一)

2.Quartz学习——Quartz简单入门Demo(二)

3.Quartz学习——Spring和Quartz集成详解(三)

4.Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)

5.Quartz源码——JobStore保存JonDetail和Trigger源码分析(一)

6.Quartz源码——scheduler.start()启动源码分析(二)

7.Quartz源码——QuartzSchedulerThread.run() 源码分析(三)

8.Quartz源码——Quartz调度器的Misfire处理规则(四)


欢迎访问我的csdn博客,我们一同成长!

不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!

博客首页http://blog.csdn.net/u010648555

8
0
查看评论

Quartz的使用(二)

SimpleTrigger 可以满足的调度需求是:在具体的时间点执行一次,或者在具体的时间点执行,并且以指定的间隔重复执行若干次。指定从某一个时间开始,以一定的时间间隔(单位是毫秒、秒、分、时)执行的任务。它的属性: 1、repeatInterval 重复间隔 2、repeatCount 重复...
  • u014785687
  • u014785687
  • 2017-05-20 13:27
  • 271

Quartz使用示例总结(转载)

任务调度在目前的JAVA应用程序中运用的十分普遍,故掌握QUARTZ是必备的技能 闲话少说,上官网:http://www.quartz-scheduler.org/ 下载最新1.80资源包 commons-logging log4j sff4j 等jar包要添加进去,quart...
  • qiaqia609
  • qiaqia609
  • 2013-12-20 18:12
  • 19084

Quartz任务调度基本使用

转自:http://www.simpleframework.net/blog/v/29912.html
  • Sup_Heaven
  • Sup_Heaven
  • 2014-07-13 14:55
  • 16774

quartz的简单使用-基于2.X(一)【基本使用】

我自己测试过的代码 SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory(); Scheduler sched = schedFact.getScheduler(); ...
  • xxssyyyyssxx
  • xxssyyyyssxx
  • 2016-05-27 14:27
  • 1677

任务调度Quartz初探Demo(一)

在上一遍博文XML处理利器:XStream ,较为简单的阐述了使用XStream解析XML配置文件的技术。但是抛出了一个问题,如果要修改配置文件,则需要重新启动服务,这不是很戳吗。因此,最好通过一种方法能够每隔一段时间去读取下这个配置文件。 基于上面的这种需求,有三种实现方式: (1)使用开源的...
  • fan2012huan
  • fan2012huan
  • 2016-02-24 18:01
  • 861

Quartz定时任务简单demo及与Spring整合

本篇博文主要是讲述2.x 版本的quartz下的实现方案,1.x 版本的实现方式大致原理一致,但是具体的实现方式有些不一致,具体体现在获取  scheduler 这个类的方式上有些不同,这里不作过多的描述; 1:java+Quartz实现定时任务: 首先:导入quartz相关的jar包...
  • w405722907
  • w405722907
  • 2017-05-18 10:06
  • 921

Quartz-demo

  • 2017-09-13 15:25
  • 29KB
  • 下载

spring+quartz demo

  • 2011-11-02 10:07
  • 3.29MB
  • 下载

quartz完整版demo

  • 2011-03-06 18:25
  • 3.54MB
  • 下载

Java任务调度框架Quartz教程实例

介绍  Quartz is a full-featured, open source job scheduling service that can be integrated with, or used along side virtually any Java application...
  • llhhyy1989
  • llhhyy1989
  • 2013-06-07 11:01
  • 61615
    个人资料
    • 访问:470881次
    • 积分:5983
    • 等级:
    • 排名:第5062名
    • 原创:169篇
    • 转载:16篇
    • 译文:0篇
    • 评论:162条
    联系方式
    博客专栏
    最新评论