任务调度器Quartz

任务调度的实现:

  1. Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。
  2. 使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行。
  3. Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多。

所需jar包:

quartz-1.8.5.jar 
commons-logging.jar 
spring-core-3.0.5.RELEASE.jar 
spring-beans-3.0.5.RELEASE.jar 
spring-context-3.0.5.RELEASE.jar 
spring-context-support-3.0.5.RELEASE.jar 
spring-asm-3.0.5.RELEASE.jar 
spring-expression-3.0.5.RELEASE.jar 
spring.transaction-3.0.5.RELEASE.jar 
spring-web-3.0.5.RELEASE.jar
 

Maven的pom.xml的配置:  

<properties>
<springframework.version>3.0.5.RELEASE</springframework.version>
</properties>

<dependencies>
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context</artifactId>
	    <version>${springframework.version}</version>
	</dependency>

	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context-support</artifactId>
	    <version>${springframework.version}</version>
	</dependency>

	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-tx</artifactId>
	    <version>${springframework.version}</version>
	</dependency>

	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-web</artifactId>
	    <version>${springframework.version}</version>
	</dependency>

	<dependency>
	    <groupId>org.quartz-scheduler</groupId>
	    <artifactId>quartz</artifactId>
	    <version>1.8.5</version>
	</dependency>
</dependencies>

Spring为Quartz提供了两个方面的支持:
1、为Quartz的重要组件类提供更具Bean风格的扩展类;
2、提供创建Scheduler的BeanFactory类,方便在Spring环境下创建对应的组件对象,并结合Spring
      容器生命周期进行启动和停止的动作。

步骤1:

在web.xml中配置spring:

<!-- srping配置 -->
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>classpath:applicationContext.xml</param-value>
</context-param>

<!-- 配置spring监听器 -->
<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
在applicationContext,xml中配置quartz

<!-- Quartz任务调度器 -->
<!-- 使用MethodInvokingJobDetailFactoryBean,任务类不需要实现Dao接口,可以通过targetMethod指定调用的方法 -->
<bean name="luceneJob" class="com.xuzengqiang.design.core.lucene.quartz.LuceneQuartz" />
<bean id="quartzMethod"
	class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
	<property name="targetObject" ref="luceneJob" />
	<property name="targetMethod" value="execute" /> <!-- 任务方法 -->
</bean>

<!-- 创建触发器Trigger -->
<bean id="luceneTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
	<property name="jobDetail" ref="quartzMethod" />
	<property name="cronExpression" value="0/5 * * * * ?" /> <!-- 每5s触发一次 -->
</bean>

<!-- Scheduler调度工厂 -->
<bean id="luceneScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
	<property name="triggers">
		<list>
			<ref bean="luceneTrigger" />
		</list>
	</property>
</bean>
测试 java类:

package com.xuzengqiang.design.core.lucene.quartz;

/**
 * Lucene任务调度
 * 
 * @author xuzengqiang
 * @since 2014-11-14
 * 
 */
public class LuceneQuartz {

	// 任务调度器统计工具
	private static int count = 1;

	protected void execute() {
		System.out.println("count:" + (count++));
	}

}

方法二:使用Spring自带的Task,使用注解方式

编写调度类:

package com.vnetoo.redu.common.lucene.quartz;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * Lucene新增索引的任务调度器:利用spring实现
 * 实现类需要加上@Component
 * 在任务调度方法加上@Scheduled
 * 
 * @author xuzengqiang
 * @since 2014-11-14 每隔5min分钟查询一次Task任务表,并将其加入索引
 */
@Component
public class IndexTask {

	private static Integer count = 1;

	/**
	 * scheduled:每5分钟刷新一次
	 * 定时器任务不能有返回值
	 */
	@Scheduled(cron = "0 0/5 * * * *")
	public void execute() {
		System.out.println(count++);
	}

}

添加task相关配置(需要加上命名空间:xmlns:task="http://www.springframework.org/schema/task" 然后加上描述:spring-task-3.0.xsd)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:task="http://www.springframework.org/schema/task"  
	xsi:schemaLocation="
			http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
			http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
			http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
			http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">

	<!-- spring的扫描机制,对com.manager下的所有类扫描 -->
	<context:component-scan base-package="com.vnetoo.redu" />
	
	<task:executor id="executor" pool-size="5" />
	<!-- 声明一个具有10个线程的池,每一个对象将获取同样的运行机会 -->  
	<task:scheduler id="scheduler" pool-size="10" />
	<task:annotation-driven executor="executor" scheduler="scheduler" />
	
</beans>














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值