黑马程序员技术交流社区

标题: 【黑马程序员济南】 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第二步:创建一个自定义Job
public 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