Quartz 教程

Quartz 介绍

一般用来 作业定时调度,比如 要在每周日 执行一次xx操作,就是后台启动一个线程。

与其他产品对比

从实现的技术上来分类,目前主要有三种技术(或者说有三种产品):

  • Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少,这篇文章将不做详细介绍。
  • 使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂,稍后会详细介绍。
  • Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多,稍后会介绍。

下载地址

这里写图片描述

这里写图片描述

Quartz 的核心接口及应用

Quartz 的核心接口 (常用)

这里写图片描述

核心接口之间的关系

这里写图片描述

Trigger

  • SimpleTrigger

    • 每一分中执行一次某一天执行,2016-06-01执行;

    • 这里写图片描述

  • ConTrigger
    • 完成更为复杂的触发 “每个月的最后一天执行
      每个月的第一个星期的第二天中午11:55分执行;
      每年的第二个月的第三个星期第四天晚上20:30分执行;”
    • 这里写图片描述
  • Cron Expressions
    • 用表达式表达程序的调度规则
    • 这里写图片描述

Quartz 简单案例

简单调度

Cron 表达式调度

Quartz 与 Spring 集成

创建一个简单的Job

... extends QuartzJobBean{

    @Override
    protected void executeInternal(JobExecutionContext context)
            throws JobExecutionException {
        System.out.println("Myjob 执行了..........."+context.getTrigger().getKey().getName());
        ApplicationContext applicationContext = (ApplicationContext)context
                .getJobDetail().getJobDataMap().get("adc");
        System.out.println(applicationContext);

        System.out.println("获取的Spring容器是:" + applicationContext);
        System.out.println("当前时间:"+new Date().toString());
    }

配置spring

    <bean name="myjobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
        <!-- 指定具体的job类 -->
        <property name="jobClass" value="com.lich.spring.MyJob" />
        <!-- 指定job的名称 -->
        <property name="name" value="myJob" />
        <!-- 指定job的分组 -->
        <property name="group" value="jobs" />
        <!-- 必须设置为true,如果为false,当没有活动的触发器与之关联时会在调度器中删除该任务  -->
        <property name="durability" value="true"/>
        <!-- 指定spring容器的key,如果不设定在job中的jobmap中是获取不到spring容器的 -->
        <property name="applicationContextJobDataKey" value="adc"/>
    </bean>

    <!-- 定义触发器 -->
    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="myjobDetail" />
        <!-- 每一分钟执行一次 -->
        <property name="cronExpression" value="*/5 * * * * ?" />
    </bean>

    <!-- 定义调度器 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="cronTrigger" />
                <ref bean="cronTrigger1" />
            </list>
        </property>
    </bean>

加载spring容器

    public static void main(String[] args) {
        // 写对应的配置文件
        new ClassPathXmlApplicationContext("classpath:Spring.xml");
    }

输出 ↓

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值