黑马程序员技术交流社区
标题: 【黑马程序员济南】 Quartz的使用 [打印本页]
作者: 小鲁哥哥 时间: 2017-12-21 16:34
标题: 【黑马程序员济南】 Quartz的使用
本帖最后由 小鲁哥哥 于 2017-12-21 16:51 编辑
【黑马程序员济南】 Quartz的使用
1. 简介
Quartz是一个处理定时任务的开源框架在我们开发过程中,比如定期清理过期的任务都会使用到。它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或EJBs。
2. Quartz的执行流程如下
1、org.quartz.Job
它是一个抽象接口,表示一个工作,也就是我们要执行的具体内容,他只定义了一个几口方法:
void execute(JobExecutionContext context)
作用等同Spring的:
org.springframework.scheduling.quartz.QuartzJobBean
2、org.quartz.JobDetail
JobDetail表示一个具体的可执行的调度程序,Job是这个可执行程调度程序所要执行的内容,它包含了这个任务调度的方案和策略。
他的实现类:
org.quartz.impl.JobDetailImpl
作用等同Spring:
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
3、org.quartz.Trigger
它是一个抽象接口,表示一个调度参数的配置,通过配置它,来告诉调度容器什么时候去调用JobDetail。
他的两个实现类:
org.quartz.impl.triggers.SimpleTriggerImpl
org.quartz.impl.triggers.CronTriggerImpl
等同于Spring的:
org.springframework.scheduling.quartz.SimpleTriggerBean
org.springframework.scheduling.quartz.CronTriggerBean
前者只支持按照一定频度调用任务,如每隔30分钟运行一次。
后者既支持按照一定频度调用任务,又支持定时任务。
4、org.quartz.Scheduler
代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。它的方法有start()、shutdown()等方法,负责管理整个调度作业。
等同Spring的: org.springframework.scheduling.quartz.SchedulerFactoryBean
3.1入门案例本案例基于quartz和spring整合应用
3.1.1第一步:创建maven工程,继承common_parent,在pom文件中引入quartz的坐标
<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>
3.1.2第二步:创建一个自定义Jobpublic class MyJob{
public void sendMsg(){
System.out.println("要发送短信了。。。。"+newDate);
}
}
3.1.3第三步:提供spring配置文件,配置定时任务<!-- 注册自定义的Job -->
<bean id="myJob" class="cn.itcast.jobs.MyJob"></bean>
<!--注册JobDetail,负责通过反射调用Job -->
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!--注入目标对象 -->
<property name="targetObject" ref="myJob"/>
<!--注入目标方法 -->
<property name="targetMethod" value="sendMsg"/>
</bean>
<!--注册触发器,指定触发时间 -->
<bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail"/>
<!--表达式,用于定义触发的时间 -->
<property name="cronExpression">
<!--每隔5秒触发一次 -->
<value>0/5 * * * * ?</value>
</property>
</bean>
<!--注册调度工厂,统一进行任务调度 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="myTrigger"/>
</list>
</property>
</bean>
3.1.4第四步:加载上面的spring文件,创建spring工厂public class Test{
public static void main(){
new ClassPathXmlApplicationContext("applicationContext");
}
}
4.在项目中使用Quartz创建定时任务发送邮件
4.1第一步:在项目中引入quartz的坐标<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>
4.2第二步:自定义Job,用于定时发送邮件
4.3第三步:在spring配置文件中注册<!-- 注册自定义的Job -->
<bean id="myJob" class="cn.itcast.bos.web.jobs.OrderJob"></bean>
<!--注册JobDetail,负责通过反射调用Job -->
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!--注入目标对象 -->
<property name="targetObject" ref="myJob"/>
<!--注入目标方法 -->
<property name="targetMethod" value="sendMail"/>
</bean>
<!--注册触发器,指定触发时间 -->
<bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail"/>
<!--表达式,用于定义触发的时间 -->
<property name="cronExpression">
<!--每隔5秒触发一次 -->
<value>0/10 * * * * ?</value>
</property>
</bean>
<!--注册调度工厂,统一进行任务调度 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="myTrigger"/>
</list>
</property>
</bean>
如果你想了解更多黑马课程,如果你想加入黑马这个大家庭学习先进技术,光交天下好友,那就快来吧!
黑马程序员济南中心联系电话:0531-55696830
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |