1. 程式人生 > >spring 整合quartz 用資料庫實現quartz的叢集

spring 整合quartz 用資料庫實現quartz的叢集

 <!-- 配置資料來源 -->
 <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>
3. quartz.properties 配置
#屬性可為任何值,用在 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