Quartz核心概念

实际业务开发中会遇到定时任务的情形,这种时候可以使用Quartz来帮助我们便捷地完成。

① Job

Job表示一个工作(任务),需要执行的具体内容。开发中我们可以通过实现Job接口,来指定我们具体要执行的工作。不过也可以直接写一个类,Spring会帮助我们做具体的注入。

public interface Job {
    void execute(JobExecutionContext context)
        throws JobExecutionException;
}

当然我们可以使用Spring配置将Job注入容器,如下:

<bean id="helloJob" class="com.example.jobs.HelloJob"/>

② JobDetail

JobDetail表示一个具体的可执行的调度程序,Job 是这个可执行程调度程序所要执行的内容。我们需要通过JobDetail来对Job进行绑定,具体如下:

  JobDetail job = newJob(HelloJob.class)
      .withIdentity("helloJob", "group1") 
      .build();

当然我们也可以通过配置Spring将其注入到应用容器当中,如下:

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

③ TriggerTrigger定义执行给定作业的计划的组件。

  Trigger trigger = newTrigger()
      .withIdentity("myTrigger", "group1")
      .startNow()
      .withSchedule(simpleSchedule()
          .withIntervalInSeconds(40)
          .repeatForever())            
      .build();

在Spring配置中继续注册我们的触发器,如下:

    <bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <!-- 注入JobDetail -->
        <property name="jobDetail" ref="jobDetail"/>
        <!-- 指定触发的时间,基于Cron表达式 -->
        <property name="cronExpression">
            <!--<value>0 0 2 * * ?</value>-->
            <value>0/10 * * * * ?</value>
        </property>
    </bean>

④ SchedulerScheduler代表一个调度容器,一个调度容器中可以注册多个 JobDetail 和 Trigger。

        //注册trigger并启动scheduler
        scheduler.scheduleJob(job,trigger);
        scheduler.start();

在Spring中我们也使用对应的FactoryBean来完成注册,如下:

    <!-- 注册一个统一的调度工厂,通过这个调度工厂调度任务 -->
    <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <!-- 注入多个触发器 -->
        <property name="triggers">
            <list>
                <ref bean="myTrigger"/>
            </list>
        </property>
    </bean>

Quartz结合Spring使用的一些细节

autoStartup自动启动

通过观察代码,我们不难发现在编码中我们手动去启动了scheduler,如下:

        scheduler.start();

而在Spring中,我们使用了SchedulerFactoryBean,工厂Bean来完成scheduler对象的注入。我们并没有显示地去获取scheduler对象,和启动任务调度。

因为在Spring bean相应的生命周期内,框架已经帮我们完成了启动与调度。

(此处我们不讨论FactoryBean获取bean对象的相关细节,大家应该清楚FactoryBean会通过getObject()来返回我们相应的bean)

SchedulerFactoryBean自动启动任务调度的部分源码

通过查看源码,我们可以看到SchedulerFactoryBean的属性默认支持scheduler的自动启动。

我们也可以通过setAutoStartup()方法来禁用此选项。

    private boolean autoStartup = true;
    /**
     * Set whether to automatically start the scheduler after initialization.
     * &lt;p&gt;Default is "true"; set this to "false" to allow for manual startup.
     */
    public void setAutoStartup(boolean autoStartup) {
        this.autoStartup = autoStartup;
    }

JobDetail与Trigger

编码形式的JobDetail与Trigger其实没有直接绑定,理论上两者都可以复用。但是Spring的形式中因为我们使用了特定的FactoryBean,Trigger绑定了JobDetail,能够复用的仅有JobDetail。

总结

Quartz的功能其实相当强大,此案例只是使用了基本的功能,对于更深入的内容没有展开讨论,更多关于Quartz作业调度的资料请关注Devmax其它相关文章!

Quartz作业调度基本使用详解的更多相关文章

  1. Xcode 4.3是否包含Quartz Composer?

    我刚从AppStore安装了Xcode4.3.当我首先开始时,它询问我是否要删除现有的4.2.4.3包括QuartzComposer吗?或者我应该说不,并为QC保留4.2?

  2. 用 Swift 写的抽屉效果,Quartz 2D 绘制表情

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  3. 可视化定时任务quartz集成解析全过程

    在开发中有很多定时任务都不是写死的而是可以人为配置并且写到数据库中的,下面这篇文章主要给大家介绍了关于可视化定时任务quartz集成解析的相关资料,需要的朋友可以参考下

  4. springBoot项目集成quartz开发定时任务案例及注意事项

    这篇文章主要介绍了springBoot项目集成quartz开发定时任务案例及注意事项,这些功能的主要接口(API)是Scheduler接口。它提供了简单的操作,例如:将任务纳入日程或者从日程中取消,开始/停止/暂停日程进度,需要的朋友可以参考下

  5. springboot创建的web项目整合Quartz框架的项目实践

    本文主要介绍了springboot创建的web项目整合Quartz框架的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  6. 深入理解React调度(Scheduler)原理

    本文主要介绍了深入理解React调度(Scheduler)原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  7. RxJava2 线程调度的方法

    这篇文章主要介绍了RxJava2 线程调度的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  8. 普通web整合quartz跑定时任务的示例

    这篇文章主要介绍了普通web整合quartz跑定时任务,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  9. SpringBoot整合Quartz实现定时任务详解

    这篇文章主要介绍了Java 任务调度框架 Quartz,Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。,下面我们来学习一下关于 Quartz更多的详细内容,需要的朋友可以参考一下

  10. SpringBoot整合任务系统quartz和SpringTask的方法

    这篇文章主要介绍了SpringBoot整合任务系统(quartz和SpringTask),Quartz是一个比较成熟了的定时任务框架,但是捏,它稍微的有些许繁琐,本文先给大家讲解下Quartz的一些基本概念结合实例代码给大家详细讲解,需要的朋友可以参考下

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部