关于Quartz作业调度框架的使用入门

Quartz是一个完全由java编写的开源作业调度框架.

在Java应用程序中进行作业调度提供了简单却强大的机制。Quartz允许开发人员根据时间间隔来调度作业。它实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。简单地创建一个org.quarz.Job接口的Java类,Job接口包含唯一的方法:
 
    public void execute(JobExecutionContext context) throws JobExecutionException;
 
在Job接口实现类里面,添加需要的逻辑到execute()方法中。配置好Job实现类并设定好调度时间表,Quartz就会自动在设定的时间调度作业执行execute()。
 
整合了Quartz的应用程序可以重用不同事件的作业,还可以为一个事件组合多个作业。Quartz通过属性文件来配置JDBC事务的数据源、全局作业、触发器侦听器、插件、线程池等等。
 
Quartz是由James House创建并最初于2001年春天被加入sourceforge工程。接下来的几年里,有很多的新特性和版本出现,但是直到项目迁移到新的站点并成为OpenSymphony项目家族的一员,才开始真正启动并受到也有的关注。
 
目前的版本已经是2.0以上,v2.x相对于v1.x有很多新特性出现,并有很多的改动,具体参见Quartz官网上说明。这里介绍的仍然是v1.x(v1.8.6)。

Quartz中三个对象

JobDetail  工作对象,指具体做什么事

Trigger    触发器,指什么时间做事,事情做多少次,侧重做事的频率  

 Scheduler  定时器对象,关联前两个对象,开启定时任务   

比较重要的表达式:

Cron表达式
1)字段取值及字符
字段名                 允许的值                        允许的特殊字符  
秒                       0-59                                , - * /  
分                       0-59                                , - * /  
小时                     0-23                                , - * /  
日                       1-31                                , - * ? / L W C  
月                       1-12 or JAN-DEC              , - * /  
周几                     1-7 or SUN-SAT                    , - * ? / L C #  
年 (可选字段)         empty, 1970-2099                 , - * /
Day-of-month 和 Day-of-week必须有一个指定为?
"?"字符:表示不确定的值
","字符:指定数个值
"-"字符:指定一个值的范围

"/"字符:指定一个值的增加幅度。n/m表示从n开始,每次增加m



Quartz在Maven中和spring一起整合的用法:

第一步先导入坐标:(版本可能不同)

<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>

第二步:配置一下web.xml文件spring核心监听器和applicationContext.xml文件的配置


<!-- spring配置文件位置 -->
	<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>

第三步:

 建立一个工作对象类加上@Service("promotionBean"),由Spring管理

第四步:配置 applicationContext.xml

<bean id="promotionJob"
		class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<!-- ref代表bean -->
		<property name="targetObject" ref="promotionBean"></property>
		<!-- ref代表的方法名 -->
		<property name="targetMethod" value="updateStatus"></property>
	</bean>

	<bean id="promotionTrigger"
		class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<property name="jobDetail" ref="promotionJob" />
		<property name="cronExpression" value="* * 20 * * ? 2018"></property>
	</bean>

	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="promotionTrigger" />
			</list>
		</property>
	</bean>
</beans>

当然spring也有自己的调度框架

1.在applicationContext.xml中加约束

xmlns:task="http://www.springframework.org/schema/task"
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.2.xsd
	

2.配置开启定时任务注解 

    <task:annotation-driven/>



3.编写具体做事情的类及方法

@Component
public class BosTask {
		
    @Scheduled(cron="*/5 * * * * ?")
    public void refresh(){
	//此处调用
    }	
}







阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页