美文网首页
分布式调度框架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
    

    相关文章

      网友评论

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

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