什么是Quartz
Quartz 是 OpenSymphony 开源组织在 Job scheduling 领域又一个开源项目,它可以与 J2EE 与 J2SE 应用程序相结合也可以单独使用。Quartz 可以用来创建简单或为运行十个,百个,甚至是好几万个 Jobs 这样复杂的程序。Jobs 可以做成标准的 Java 组件或 EJBs。Quartz 的最新版本为 Quartz 2.3.0。
Quartz 可以用来做什么?
Quartz 是一个任务调度框架。可以完成一下常见的业务场景:
- 定时查询交易结果
- 晚间空闲时间批量上传附件
- 定时划扣
总结就是你定义一个动作触发时间的规则,Quartz负责到了时间点触发相应的Job执行任务。
项目结构
image.pngplatform-core-task-api --- 定时任务服务接口定义,请求类和响应类以及枚举。
platform-core-task --- 定时任务服务实现,如列出Job任务列表,立即执行任务,暂停任务等
platform-core-task-job --- 专门存放Job的地方,配置http url 调用业务系统。
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
网友评论