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");
	}

输出 ↓

这里写图片描述

posted @ 2016-07-05 08:44  裸奔的小猪  阅读(499)  评论(0)    收藏  举报