美文网首页
分布式调度框架Quartz的使用

分布式调度框架Quartz的使用

作者: RobertCrazying | 来源:发表于2018-02-24 17:13 被阅读837次

什么是Quartz

Quartz 是 OpenSymphony 开源组织在 Job scheduling 领域又一个开源项目,它可以与 J2EE 与 J2SE 应用程序相结合也可以单独使用。Quartz 可以用来创建简单或为运行十个,百个,甚至是好几万个 Jobs 这样复杂的程序。Jobs 可以做成标准的 Java 组件或 EJBs。Quartz 的最新版本为 Quartz 2.3.0。

Quartz 可以用来做什么?

Quartz 是一个任务调度框架。可以完成一下常见的业务场景:

  • 定时查询交易结果
  • 晚间空闲时间批量上传附件
  • 定时划扣

总结就是你定义一个动作触发时间的规则,Quartz负责到了时间点触发相应的Job执行任务。

项目结构

image.png

platform-core-task-api --- 定时任务服务接口定义,请求类和响应类以及枚举。
platform-core-task --- 定时任务服务实现,如列出Job任务列表,立即执行任务,暂停任务等
platform-core-task-job --- 专门存放Job的地方,配置http url 调用业务系统。

image.png

platform-web-scheduler --- 调度中心,触发Job执行,建集群部署这个项目即可。

Spring与Quartz集成

quartz本身是不在spring容器内管理的,这里使用spring-quartz实现。
主要代码如下:

@Component
public class PlatformJobFactory extends AdaptableJobFactory {
    
    @Resource
    private AutowireCapableBeanFactory autowireCapableBeanFactory;
    
    @Override
    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
        // 获取new出来的Job实例
        Object jobInstance = super.createJobInstance(bundle);
        // 通过工厂向实例注入spring bean
        autowireCapableBeanFactory.autowireBean(jobInstance);
        return jobInstance;
    }
}
<!-- 定时任务列表 -->
    <bean id="platformSchedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:task/quartz.properties"/>
        <property name="jobFactory" ref="platformJobFactory"/>
    </bean>

这样在Job里面就可以通过@Resource或者@Autowire注解注入Bean了。

Quartz配置

# 定时任务示例配置
org.quartz.scheduler.instanceName = platformSchedulerFactory
org.quartz.scheduler.instanceId = AUTO

# 定时任务线程池配置
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

# 定时任务存储配置
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.maxMisfiresToHandleAtATime = 10
org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 20000

# 定时任务更新检查跳过配置
org.quartz.scheduler.skipUpdateCheck = true

相关文章

  • ElasticJob任务执行过程

    ElasticJob是基于Quartz实现的弹性分布式任务调度框架,整个任务触发的底层是Quartz来触发。Lit...

  • Quartz框架入门一

    一 简介 (1)为什么使用Quartz 首先Quartz框架的作用是进行作业调度的,但是进行作业调度已经存在了Ja...

  • 分布式调度框架Quartz的使用

    什么是Quartz Quartz 是 OpenSymphony 开源组织在 Job scheduling 领域又一...

  • Quartz 调度器

    一、简介 Quartz是一个开源作业调度框架,框架的核心是调度器,调度器负责管理Quartz应用运行时环境,调度器...

  • Quartz.NET 作业调度(一):Test

    Quartz.NET 是一个开源的作业调度框架,是 Java 作业调度框架 Quartz 的.NET 版本,对于...

  • elastic-job console

    Elastic job是当当开源的分布式任务调度框架,基于成熟的Quartz与Zookeeper封装。其中elas...

  • [Spring]支持注解的Spring调度器

    概述 如果想在Spring中使用任务调度功能,除了集成调度框架Quartz这种方式,也可以使用Spring自己的调...

  • spring调度器

    概述 如果想在Spring中使用任务调度功能,除了集成调度框架Quartz这种方式,也可以使用Spring自己的调...

  • Java高级工程师

    Elastic Job 分布式任务调度 Quartz 任务调度 RocketMQ RabbitMQ Acti...

  • 定时任务调度之Spring-Task

     之前一直使用Quartz定时调度框架,感觉其配置起来太繁锁,近期决定采用Spring-Task作为任务调度框架,...

网友评论

      本文标题:分布式调度框架Quartz的使用

      本文链接:https://www.haomeiwen.com/subject/mlgqxftx.html