Quartzt框架与Spring整合使用详解

本文详细介绍了Quartz框架的基本概念,如Job、JobDetail、Trigger和Scheduler,以及如何利用CRON表达式定制执行规则。通过Spring整合Quartz,讲解了从导入依赖、创建任务类到配置触发器的完整流程。
摘要由CSDN通过智能技术生成

一.Quartz框架简介

Quartz是一个开源项目,它可以与j2EE和j2SE结合使用,也可以单独使用。Quartz可以用来创建许多Jobs这样的复杂的程序,并通过cron表达式自定义执行的规则。Quartz的几个核心概念如下:

1.Job:代表一个工作,要执行的内容,此接口只有一个方法execute().

2.JobDetail:代表一个可执行的调度程序,Job是这个可执行调度程序的内容,另外,JobDetail还包含了这个任务调度的方案和策略。

3.Trigger:代表一个调度参数的配置

4.Scheduler:代表一个调度容器,可以注册多个JobDetial和Trigger

5.SchedulerFactory:代表一个调度工厂,用来创建一个scheduler调度器

二.Quartz执行流程


此调度流程体现在Spring就是,Job注入到JobDetial,JobDetial注入到Trigger,Trigger注入到Scheduler中

三.CRON表达式

CRON表达式是用来自定义Quartz执行规则的,在实际使用时可以借助在线工具自动生成。

具体的规则如下:

1.CRON由七个域组成,顺序为:秒 分 时 日 月 周 年,以空格作为分界?

2.特殊字符:

使用星号(*)指示着你想在这个域上包含所有合法的值。例如,在月份域上使用星号意味着每个月都会触发这个 trigger。
?号只能用在日和周域上,但是不能在这两个域上同时使用,指不为该域指定值
逗号(,)是用来在给某个域上指定一个值列表的。例如,使用值 0,15,30,45在秒域上意味着每15秒触发一个 trigger。 
斜杠(/)是用于时间表的递增的。例如 0/15表示每15分钟的递增。
中划线(-)用于指定一个范围。例如,在小时域上的 3-8意味着 "3,4,5,6,7和 8 点
L说明了某域上允许的最后一个值。它仅被日和周域支持
W字符代表着平日 (Mon-Fri),并且仅能用于日域中
#字符仅能用于周域中。它用于指定月份中的第几周的哪一天


由于可以在线生成CRON表达式,故大致了解即可。

四.在Spring配置使用Quartz流程详解

第一步:导入相关依赖

		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz</artifactId>
			<version>2.2.3</version>
		</dependency>
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz-jobs</artifactId>
			<version>2.2.3</version>
		</dependency>

第二步:自定义创建任务类

public class MyJob {
	public void run() {
		System.out.println("自定义的作业类执行了:" + 
				new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
	}
}
第三步:在spring配置文件中配置任务类

<bean id="myJob" class="com.cai.quartz.MyJob"></bean>
第四步:在spring配置文件中配置JobDetail

<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<!-- 注入目标对象 -->
		<property name="targetObject" ref="myJob"/>
		<!-- 注入目标方法 -->
		<property name="targetMethod" value="run"/>
	</bean>

第五步:在spring配置文件中配置触发器

<bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<!-- 注入任务详情对象 -->
		<property name="jobDetail" ref="jobDetail"/>
		<!-- 注入cron表达式,通过这个表达式指定触发的时间点 -->
		<property name="cronExpression">
			<value>0/2 * * * * ? 2017-2099</value>
		</property>
	</bean>

第六步:在spring配置文件中配置scheduler

<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<!-- 注入触发器 -->
		<property name="triggers">
			<list>
				<ref bean="myTrigger"/>
			</list>
		</property>
	</bean>

第七步:加载spring文件,创建spring工厂

public class App {
	public static void main(String[] args) {
		new ClassPathXmlApplicationContext("applicationContext.xml");
	}
经过此七步,自定义一个job,并把其配置到spring配置文件中,即可实现job任务的定时执行。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值