Java学习笔记

Spring+Quartz--定时任务的单独和集群配置记录

2017-08-31  本文已影响476人  georgekaren

喜欢从业的专注,七分学习的态度。

概述

Java项目定时任务(JOB)首选quartz,一般我们选择集成到Spring中变成Spring+Quartz。抛开API和复杂的部署逻辑,简述简单配置经验。 根据实际部署情况需要区分:单独环境,集群环境。

Job
单独环境:只有一台机器运行JOB,不存在任务冲突和抢任务问题。
集群环境:存在多个机器多个应用服务器,每个应用都会运行JOB,产生任务、事物抢占等一系列资源冲突问题,在集群环境下需要保证多个应用服务器中同一时间只有一个应用服务运行JOB。

原理简述

配置JOB

cronExpression的时间采用cron时间表达式,具体时间格式最简单说明就是第1位是秒,第2位是分钟,第3位是小时,第4位是日期,斜杠(代表每)。
如:
每分钟到第10秒的时候执行,10 * * * * ?
每小时到第15分钟的时候执行,0 15 * * * ?
每天到20点15分钟20秒的时候执行,20 15 20 * * ?
每5秒执行,0/5 * * * * ?
每5分钟执行,0 0/5 * * * ?
每小时执行,0 0 1 * * ?
涉及到更多复杂公式使用时,百度"cron时间表达式"

cron时间表达式

独立的环境直接在triggers下配置触发器列表。

<bean id="schedulerFactory" lazy-init="false" autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="saveOrderToDatabaseJobTrigger"/>
</list>
</property>
</bean>

集群环境

集群环境相对于单独环境配置信息更复杂,需要配置集群属性、数据源、实例名信息。通常通过加载quartz.properties配置文件,将信息配置到quartz.properties文件中,当然也可以增加quartzProperties属性,将quartz.properties中的内容配置到quartzProperties节点下面,效果是一样的。

管理类配置
<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="quartzProperties">
<props>
<prop key="org.quartz.scheduler.instanceName">quartzScheduler</prop>
<prop key="org.quartz.scheduler.instanceId">AUTO</prop>
<prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
<prop key="org.quartz.threadPool.threadCount">3</prop>
<prop key="org.quartz.threadPool.threadPriority">5</prop>
<prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
<prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
<prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.MSSQLDelegate </prop>
<prop key="org.quartz.jobStore.selectWithLockSQL">SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?</prop>
<prop key="org.quartz.jobStore.tablePrefix">QRTZ_</prop>
<prop key="org.quartz.jobStore.isClustered">true</prop>
<prop key="org.quartz.jobStore.clusterCheckinInterval">20000</prop>
</props>
</property>
<property name="applicationContextSchedulerContextKey" value="applicationContextKey" />
<property name="autoStartup" value="true" />
<property name="triggers"><list><ref bean="saveOrderToDatabaseJobTrigger"/>
</list>
</property>
</bean>

注:properties属性中可以在百度中搜"quartz.properties详细配置",了解含义后根据项目实际情况进行调整。
其中:

集群持久化后的JOB可以在三个表中检查JOB配置和运行情况,QRTZ_JOB_DETAILS、QRTZ_TRIGGERS、QRTZ_CRON_TRIGGERS

<small>坚持积累,坚持学习。</small>

上一篇下一篇

猜你喜欢

热点阅读