spring 整合quartz 用資料庫實現quartz的叢集
阿新 • • 發佈:2019-01-24
3. quartz.properties 配置<!-- 配置資料來源 --> <bean id="quartzDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"> <value>org.gjt.mm.mysql.Driver</value> </property> <property name="url"> <value>jdbc:mysql://192.168.75.128:3306/quartz?characterEncoding=utf8</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>123456</value> </property> <property name="maxActive" value="5"></property> <property name="maxIdle" value="20"></property> <property name="maxWait" value="50"></property> <property name="defaultAutoCommit" value="true"></property> </bean> <!-- 配置job --> <bean id="jobHelloDetail" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass" value="com.mas.db.JobHello"/> <!-- job實現類 --> </bean> <!-- 配置trigger --> <bean id="jobHelloTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="jobHelloDetail" /> <!-- 對應的 job detail--> <property name="cronExpression" value="1/2 * * * * ?" /> <!--cronExpression 表示式 --> </bean> <bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="dataSource"> <ref bean="quartzDataSource" /> <!--資料來源引用指向,包含叢集所需的所有表 --> </property> <!--applicationContextSchedulerContextKey: 是org.springframework.scheduling.quartz.SchedulerFactoryBean這個類中把spring上下 文以key/value的方式存放在了quartz的上下文中了,可以用applicationContextSchedulerContextKey所定義的key得到對應的spring上下文, 可以看下原始碼註釋--> <property name="applicationContextSchedulerContextKey" value="applicationContextKey" /> <property name="configLocation" value="classpath:quartz.properties" /> <!--用於指明quartz的配置檔案的位置 --> <!-- job trigger 例項載入到 scheduler factory中 --> <property name="triggers"> <list> <ref bean="jobHelloTrigger" /> </list> </property> </bean>
#屬性可為任何值,用在 JDBC JobStore 中來唯一標識例項,但是所有叢集節點中必須相同。
org.quartz.scheduler.instanceName = HumsScheduler
#為 AUTO即可,基於主機名和時間戳來產生例項 ID。
org.quartz.scheduler.instanceId = AUTO
orgorg.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
#將任務持久化到資料中。因為叢集中節點依賴於資料庫來傳播 Scheduler 例項的狀態,你只能在使用 JDBC JobStore 時應用 Quartz 叢集。這意味著你必須使用 JobStoreTX 或是 JobStoreCMT 作為 Job 儲存;你不能在叢集中使用 RAMJobStore。
orgorg.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
orgorg.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix = QRTZ_
#jobStore處理未按時觸發的Job的數量
org.quartz.jobStore.maxMisfiresToHandleAtATime=10
#告訴了 Scheduler 例項要它參與到一個叢集當中。這一屬性會貫穿於排程框架的始終,用於修改叢集環境中操作的預設行為。
org.quartz.jobStore.isClustered = true
#定義了Scheduler例項檢入到資料庫中的頻率(單位:毫秒)。Scheduler 檢查是否其他的例項到了它們應當檢入的時候未檢入;這能指出一個失敗的 Scheduler 例項,且當前 Scheduler 會以此來接管任何執行失敗並可恢復的 Job。通過檢入操作,Scheduler 也會更新自身的狀態記錄。clusterChedkinInterval 越小,Scheduler 節點檢查失敗的 Scheduler 例項就越頻繁。預設值是 15000 (即15 秒)。
org.quartz.jobStore.clusterCheckinInterval = 15000