分布式调度框架Quartz的使用

2018-02-24  本文已影响837人  RobertCrazying

什么是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
上一篇下一篇

猜你喜欢

热点阅读