定时框架quartz的使用

Quartz就是定时调度任务的框架,开发中我们基于maven来导入相应的jar包,

Spring整合quartzjob不会被spring管理,需要编写一个jobFactory来完成job的注入.

spring整合quartz框架实现定时任务的完成.

包结构


1.maven的依赖

<dependencies>
  		<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>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.12</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.1.7.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>4.1.7.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>4.1.7.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>4.1.7.RELEASE</version>
		</dependency>
  </dependencies>

2.applicationContext.xml的配置

<?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:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd ">
 	
 	<context:component-scan base-package="com.quartz.service"></context:component-scan>
 	
 	<!-- job -->
 	<!-- jobclass不是被spring管理的类,无法注入的问题,如要自己创建一个jobfactory来实现bean的注入wen -->
 	<bean id="helloJob" 
 		class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
 		<property name="jobClass" value="com.quartz.job.HelloJob" />   		
 	</bean>
 	
 	<!-- trigger -->
 	<bean id="simpleTrigger" 
 		class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
 		<property name="jobDetail" ref="helloJob" />
 		<!-- 3秒后第一次执行 -->
 		<property name="startDelay" value="3000" />
 		<!-- 5秒后重复执行 -->
 		<property name="repeatInterval" value="5000" />
 	</bean>
 	
 	<!-- scheduler  -->
 	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
 		<property name="jobFactory" ref="jobFactory" />
 		<property name="triggers">
 			<list>
 				<ref bean="simpleTrigger"/>
 			</list>
 		</property>
 	</bean>
 	
</beans>

3.编写任务job

package com.quartz.job;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;

import com.quartz.service.HelloService;

public class HelloJob implements Job{

	@Autowired
	private HelloService helloService;
	public void execute(JobExecutionContext context) throws JobExecutionException {	
		helloService.SayHello();
	}

}

4.编写定时任务和jobFactory

package com.quartz.service;

import org.springframework.stereotype.Service;

@Service
public class HelloService {

	public void SayHello() {
		System.out.println("hello,quartz spring !!!~~");
	}
}

5.jobFactory的编写

package com.quartz.service;

import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.scheduling.quartz.AdaptableJobFactory;
import org.springframework.stereotype.Service;

@Service("jobFactory")
public class JobFactory extends AdaptableJobFactory {

	@Autowired
	private AutowireCapableBeanFactory capableBeanFactory;

	@Override
	protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
		Object jobInstance = super.createJobInstance(bundle);
		capableBeanFactory.autowireBean(jobInstance);
		return jobInstance;
	}

}

猜你喜欢

转载自blog.csdn.net/kebo_china/article/details/79511944