Quartz - Spring整合Quartz實現叢集的定時任務
一、關於Quartz叢集的說明
Quartz的叢集部署方案在架構上是分散式的,每個節點是一個獨立的Quartz應用,並不與另一個節點或是管理節點通訊,沒有負責集中管理的節點。
Quartz是通過資料庫表來感知另一應用,利用資料庫鎖的方式來實現叢集並完成對併發的控制。所以,分散式部署時需要保證各個節點的系統時間一致。
二、配置Spring的配置檔案
<!-- 排程工廠 -->
<bean id="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!-- 資料來源 -->
<property name="dataSource" ref="dataSource" />
<!-- 排程器配置:引入檔案方式 -->
<property name="configLocation" value="classpath:quartz.properties"/>
<!-- 排程器配置:直接配置方式
<property name="quartzProperties"><props><prop key=""></prop></props></property> -->
<!-- 排程器名稱 -->
<property name="schedulerName" value="CRMscheduler" />
<!-- QuartzScheduler 延時啟動,應用啟動完後多久再啟動 -->
<property name="startupDelay" value="30" />
<!-- 把Spring的上下文作用這個屬性的值作為key儲存到quartz的上下文中。後續可以在quartz的上下文中通過這個值獲取Spring的上下文 -->
<property name="applicationContextSchedulerContextKey" value="applicationContext" />
<!-- QuartzScheduler 啟動時更新己存在的Job。適用於修改了Trigger以後自動更新,不用手工改刪資料庫表 -->
<property name="overwriteExistingJobs" value="true" />
<!-- 設定自動啟動 -->
<property name="autoStartup" value="true" />
<!-- 註冊觸發器 -->
<property name="triggers">
<list>
<ref bean="exampleClusterJobTrigger" />
</list>
</property>
</bean>
<!--定義排程器-->
<bean id="exampleClusterJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="exampleClusterJob"/>
<property name="targetMethod" value="doJob"/>
<property name="concurrent" value="false"/>
</bean>
<!--定義觸發器-->
<bean id="exampleClusterJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="exampleClusterJobDetail"/>
<property name="cronExpression">
<value>0 0 3 * * ?</value>
</property>
</bean>
三、Quartz常用屬性配置
# ===========================================================================
# 排程器屬性
# ===========================================================================
# 排程器例項名 叢集中所有例項應該設定為相同
org.quartz.scheduler.instanceName=TstQuartzScheduler
# 例項Id,每個例項必須唯一,設定為自動即可
org.quartz.scheduler.instanceid:AUTO
# ===========================================================================
# 執行緒池屬性
# ===========================================================================
# 執行緒池的實現類
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
# 指定執行緒數,至少為1(無預設值,一般設定為1-100之間比較合適)
org.quartz.threadPool.threadCount=10
# 設定執行緒的優先順序(最大為java.lang.Thread.MAX_PRIORITY 10,最小為Thread.MIN_PRIORITY 1,預設為5)
org.quartz.threadPool.threadPriority=5
# ===========================================================================
# 叢集配置
# ===========================================================================
# 資料庫中儲存排程資訊的表的字首
org.quartz.jobStore.tablePrefix=QRTZ_
# 觸發器(Trigger)超時(Misfire)的最大時間
org.quartz.jobStore.misfireThreshold=6000
# 觸發最大Misfire的次數
org.quartz.jobStore.maxMisfiresToHandleAtATime=10
# 儲存排程資訊的模式
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
# 資料庫方言
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
# 是否是叢集
org.quartz.jobStore.isClustered=true
# 叢集的狀態更新時間間隔
org.quartz.jobStore.clusterCheckinInterval=15000
四、Quartz資料庫核心表
QRTZ_CALENDARS 儲存Quartz的Calendar資訊
QRTZ_CRON_TRIGGERS 儲存CronTrigger,包括Cron表示式和時區資訊
QRTZ_FIRED_TRIGGERS 儲存與已觸發的Trigger相關的狀態資訊,以及相聯Job的執行資訊
QRTZ_PAUSED_TRIGGER_GRPS 儲存已暫停的Trigger組的資訊
QRTZ_SCHEDULER_STATE 儲存少量的有關Scheduler的狀態資訊,和別的Scheduler例項
QRTZ_LOCKS 儲存程式的悲觀鎖的資訊
QRTZ_JOB_DETAILS 儲存每一個已配置的Job的詳細資訊
QRTZ_JOB_LISTENERS 儲存有關已配置的JobListener的資訊
QRTZ_SIMPLE_TRIGGERS 儲存簡單的Trigger,包括重複次數、間隔、以及已觸的次數
QRTZ_BLOG_TRIGGERS Trigger作為Blob型別儲存
QRTZ_TRIGGER_LISTENERS 儲存已配置的TriggerListener的資訊
QRTZ_TRIGGERS 儲存已配置的Trigger的資訊
相關文章
- SpringBoot整合Quartz定時任務Spring Bootquartz
- Spring Boot Quartz 分散式叢集任務排程實現Spring Bootquartz分散式
- springboot整合Quartz實現動態配置定時任務Spring Bootquartz
- Grails整合Quartz外掛實現定時任務(Job)AIquartz
- Spring Boot 配置 Quartz 定時任務Spring Bootquartz
- 普通web整合quartz跑定時任務Webquartz
- Spring+quartz實現動態化定時任務 (轉)Springquartz
- Spring Boot整合quartz實現定時任務並支援切換任務資料來源Spring Bootquartz
- quartz學習-quartz編碼方式實現定時任務簡例quartz
- Quartz定時任務框架(二) Quartz詳解quartz框架
- 石英定時任務-quartzquartz
- Quartz 定時任務管理類quartz
- Quartz - Spring和Quartz的整合quartzSpring
- spring-boot-route(二十一)quartz實現動態定時任務Springbootquartz
- Spring quartz 叢集模式的坑Springquartz模式
- Quartz在Spring中叢集quartzSpring
- java Quartz 定時任務管理類Javaquartz
- springboot Quartz 定時任務工具類Spring Bootquartz
- springboot+quartz以持久化的方式實現定時任務Spring Bootquartz持久化
- SpringBoot整合Quartz實現動態修改定時任務間隔Spring Bootquartz
- Quartz高可用定時任務快速上手quartz
- Quartz定時任務框架(一) 入門案例quartz框架
- 淺談分散式定時任務之quartz分散式quartz
- spring-quartz整合Springquartz
- 簡單說說Java 定時任務框架---QuartzJava框架quartz
- 使用Quartz實現定時作業quartz
- java 定時任務 quartz 時間表示式Cron總結Javaquartz
- 如何實現Spring Boot和Quartz整合? - Nguyen Phuc HaiSpring BootquartzAI
- springmvc+quartz叢集+sqlserverSpringMVCquartzSQLServer
- DolphinScheduler心臟:Quartz的定時任務排程框架深度解析quartz框架
- spring4.x 整合quartz2.x 叢集化配置專案例項Springquartz
- Quartz叢集增強版_02.任務輪詢及最佳化❤️quartz
- springboot專案整合quartz動態建立,停止,恢復,刪除定時任務,整合swagger3.0Spring BootquartzSwagger
- quartz叢集增強版🎉quartz
- SpringBoot整合任務排程框架Quartz及持久化配置Spring Boot框架quartz持久化
- 3分鐘掌握Quartz.net分散式定時任務的姿勢quartz分散式
- SpringBoot 2.x quartz多資料來源定時任務配置Spring Bootquartz
- [原始碼分析] 定時任務排程框架 Quartz 之 故障切換原始碼框架quartz