本帖最后由 小鲁哥哥 于 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
|