<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    瘋狂

    STANDING ON THE SHOULDERS OF GIANTS
    posts - 481, comments - 486, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Quartz+Spring的集群配置(轉)

    Posted on 2012-05-11 11:02 瘋狂 閱讀(18432) 評論(1)  編輯  收藏 所屬分類: java spring架構
    原來配置的Quartz是通過spring配置文件生效的,發現在非集群式的服務器上運行良好,但是將工程部署到水平集群服務器上去后改定時功能不能正常運行,沒有任何錯誤日志,于是從jar包、JDK版本、cronExpression到服務器類型,甚至查到了服務器操作系統的類型,都沒能找到解決的辦法,后來才知道是集群惹的禍!

            詳細步驟如下:

    1、 按照Quartz集群工作原理

    圖:表示了每個節點直接與數據庫通信,若離開數據庫將對其他節點一無所知

     

    在數據庫中建表。建表模版在Quartz包下docs/dbTables下,選擇相應的數據庫和版本即可。DB2_V8的11個Table列表如下:

    QRTZ_JOB_LISTENERS

    QRTZ_TRIGGER_LISTENERS

    QRTZ_FIRED_TRIGGERS

    QRTZ_PAUSED_TRIGGER_GRPS

    QRTZ_SCHEDULER_STATE

    QRTZ_LOCKS

    QRTZ_SIMPLE_TRIGGERS

    QRTZ_CRON_TRIGGERS

    QRTZ_TRIGGERS

    QRTZ_JOB_DETAILS

    QRTZ_CALENDARS

    QRTZ_BLOB_TRIGGERS

    2、 配置數據庫連接池,如果spring已經配置則不需要再另行配置,只需在后面配置的applicationContext-quartz.xml引入即可。

    applicationContext.xml:

     

     1<bean id="propertyConfigurer"  
     2class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
      
     3           <property name="location">
      
     4           <value>classpath:dataConfig.properties</value>
      
     5           </property>
      
     6</bean>
      
     7      <bean id="ds34" class="org.apache.commons.dbcp.BasicDataSource"
      
     8           destroy-method="close">
      
     9           <property name="driverClassName">
      
    10                 <value>${ds34.driver}</value>
      
    11           </property>
      
    12           <property name="url">
      
    13                 <value>${ds34.url}</value>
      
    14           </property>
      
    15           <property name="username">
      
    16                 <value>${ds34.username}</value>
      
    17           </property>
      
    18           <property name="password">
      
    19                 <value>${ds34.password}</value>
      
    20           </property>
      
    21           <property name="maxActive" value="5"></property>
      
    22           <property name="maxIdle" value="20"></property>
      
    23           <property name="maxWait" value="50"></property>
      
    24           <property name="defaultAutoCommit" value="true"></property>
      
    25</bean>  

     

    dataConfig.properties:

    ds34.driver=com.ibm.db2.jcc.DB2Driver   
    ds34.url
    =jdbc:db2://192.168.*.*:50000/XXXX   

    ds34.username=admin  
    ds34.password
    =*******

    3、 配置quartz.properties

    org.quartz.scheduler.instanceName屬性可為任何值,用在 JDBC JobStore 中來唯一標識實例,但是所有集群節點中必須相同。
    org.quartz.scheduler.instanceId 屬性為 AUTO即可,基于主機名和時間戳來產生實例 ID。
    org.quartz.jobStore.class屬性為 JobStoreTX,將任務持久化到數據中。因為集群中節點依賴于數據庫來傳播 Scheduler 實例的狀態,你只能在使用 JDBC JobStore 時應用 Quartz 集群。這意味著你必須使用 JobStoreTX 或是 JobStoreCMT 作為 Job 存儲;你不能在集群中使用 RAMJobStore。
    org.quartz.jobStore.isClustered 屬性為 true,你就告訴了 Scheduler 實例要它參與到一個集群當中。這一屬性會貫穿于調度框架的始終,用于修改集群環境中操作的默認行為。
    org.quartz.jobStore.clusterCheckinInterval 屬性定義了Scheduler 實例檢入到數據庫中的頻率(單位:毫秒)。Scheduler 檢查是否其他的實例到了它們應當檢入的時候未檢入;這能指出一個失敗的 Scheduler 實例,且當前 Scheduler 會以此來接管任何執行失敗并可恢復的 Job。通過檢入操作,Scheduler 也會更新自身的狀態記錄。clusterChedkinInterval 越小,Scheduler 節點檢查失敗的 Scheduler 實例就越頻繁。默認值是 15000 (即15 秒)。

    quartz.properties:

     

     1##Quartz 調度任務所需的配置文件   
     2
      
     3
    ##org.quartz.scheduler.instanceName屬性可為任何值,用在 JDBC JobStore 中來唯一標識實例,但是所有集群節點中必須相同。   
     4org.quartz.scheduler.instanceName =
     HumsScheduler         
     5
    ##org.quartz.scheduler.instanceId 屬性為 AUTO即可,基于主機名和時間戳來產生實例 ID。   
     6org.quartz.scheduler.instanceId =
     AUTO        
     7
         
     8orgorg.quartz.threadPool.class =
     org.quartz.simpl.SimpleThreadPool       
     9org.quartz.threadPool.threadCount = 10
           
    10org.quartz.threadPool.threadPriority = 5
           
    11org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread =
     true      
    12
        
    13org.quartz.jobStore.misfireThreshold = 60000
          
    14
     ##org.quartz.jobStore.class屬性為 JobStoreTX,將任務持久化到數據中。   
    15
     ##因為集群中節點依賴于數據庫來傳播 Scheduler 實例的狀態,你只能在使用 JDBC JobStore 時應用 Quartz 集群。   
    16
     ##這意味著你必須使用 JobStoreTX 或是 JobStoreCMT 作為 Job 存儲;你不能在集群中使用 RAMJobStore。   
    17orgorg.quartz.jobStore.class =
     org.quartz.impl.jdbcjobstore.JobStoreTX       
    18orgorg.quartz.jobStore.driverDelegateClass=
    org.quartz.impl.jdbcjobstore.StdJDBCDelegate       
    19org.quartz.jobStore.tablePrefix =
     QRTZ_       
    20org.quartz.jobStore.maxMisfiresToHandleAtATime=10
           
    21
    ##org.quartz.jobStore.isClustered 屬性為 true,你就告訴了 Scheduler 實例要它參與到一個集群當中。   
    22
    ##這一屬性會貫穿于調度框架的始終,用于修改集群環境中操作的默認行為。   
    23org.quartz.jobStore.isClustered =
     true        
    24
    ##org.quartz.jobStore.clusterCheckinInterval 屬性定義了Scheduler 實例檢入到數據庫中的頻率(單位:毫秒)。   
    25
    ##Scheduler 檢查是否其他的實例到了它們應當檢入的時候未檢入;這能指出一個失敗的 Scheduler 實例,且當前 Scheduler 會以此來接管任何執行失敗并可恢復的 Job。   
    26##通過檢入操作,Scheduler 也會更新自身的狀態記錄。clusterChedkinInterval 越小,Scheduler 節點檢查失敗的 Scheduler 實例就越頻繁。默認值是 15000
     (即15 秒)。   
    27org.quartz.jobStore.clusterCheckinInterval = 20000

    4、 配置applicationContext-quartz.xml

     

     1<?xml version="1.0" encoding="UTF-8"?>       
     2
      
     3<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
           
     4<beans>
           
     5    <bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
           
     6        <property name="dataSource">
           
     7            <ref bean="ds34"/>  <!--數據源引用指向,包含集群所需的所有表-->
      
     8        </property>
           
     9        <property name="applicationContextSchedulerContextKey" value="applicationContextKey"/>
         
    10<!--applicationContextSchedulerContextKey: 是org.springframework.scheduling.quartz.SchedulerFactoryBean這個類中把spring上下 文以key/value的方式存放在了quartz的上下文中了,可以用applicationContextSchedulerContextKey所定義的key得到對應的spring上下文-->
      
    11        <property name="configLocation" value="classpath:quartz.properties"/>
          
    12<!--configLocation:用于指明quartz的配置文件的位置 -->
        
    13      <property name="triggers">
           
    14            <list>
             
    15                  <ref bean="trigger1"/>
           
    16            </list>
           
    17      </property>
           
    18    </bean>
          
    19<bean id="jobDetail1" class="org.springframework.scheduling.quartz.JobDetailBean">
      
    20      <property name="jobClass">
      
    21            <value>繼承QuartzJobBean的類的引用,如果不繼承QuartzJobBean可以參考 http://www.javaeye.com/topic/486055</value>
      
    22      </property>
      
    23</bean>
      
    24    <bean id="trigger1" class="org.springframework.scheduling.quartz.CronTriggerBean">
           
    25        <property name="jobDetail" ref="jobDetail1"/>
           
    26        <property name="cronExpression" value="0 0/5 * ? * * *"/>
           
    27<!—cronExpression 表達式 -->
      
    28    </bean>
              
    29</beans>

     

      5、 配置Job任務注意:加入定時任務有兩種方式:

    ①     繼承QuartzJobBean的類,重寫executeInternal(),詳細寫法:

     

    <bean id="jobDetail1" class="org.springframework.scheduling.quartz.JobDetailBean">

          
    <property name="jobClass">

                
    <value>繼承QuartzJobBean的類的引用,如果不繼承QuartzJobBean可以參考 http://www.javaeye.com/topic/486055</value>

          
    </property>

    </bean>

     

    ②   用org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean指定類和方法,但是直接使用會報java.io.NotSerializableException異常,一般用網上流傳的(需要將兩個類copy到自己的工程下,要有springJAR包,Job需要持久化到數據庫中,SimpleService必須實現Serializable)frameworkx.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean,可以參考: http://jira.springframework.org/browse/SPR-3797。詳細寫法:

     

    1<bean id="jobDetail1" class=" 工程里MethodInvokingJobDetailFactoryBean的路徑.MethodInvokingJobDetailFactoryBean"> 
    2        <property name="targetObject" ref="simpleService"/> 
    3        <property name="targetMethod" value="testMethod1"/> 
    4<property name="shouldRecover" value="true"/> 
    5    </bean>

     

    6、 配置到spring配置文件,自動調度任務。

     

    <context-param>  
          
    <param-name>contextConfigLocation</param-name>  
          
    <param-value>  
                
    <!--Quartz Spring applicationContext -->  
                WEB-INF/classes/applicationContext-quartz.xml   
          
    </param-value>  
    </context-param>

     7、 測試用例

     

    1package test;      
    2import org.springframework.context.ApplicationContext;      
    3import org.springframework.context.support.ClassPathXmlApplicationContext;      
    4public class MainTest {      
    5    public static void main(String[] args) {      
    6        ApplicationContext springContext = new ClassPathXmlApplicationContext(new String[]{"classpath:applicationContext.xml","classpath:applicationContext-quartz.xml"});      
    7    }
          
    8}
    轉自:http://m.tkk7.com/zwzw-love/archive/2010/11/16/338182.html

    其他參考:
    http://gocom.primeton.com/modules/newbb/forumtopic19180_9963_40.htm

    評論

    # re: Quartz+Spring的集群配置(轉)  回復  更多評論   

    2014-01-04 16:38 by 333
    沖vxcxz
    主站蜘蛛池模板: 亚洲线精品一区二区三区影音先锋| 国产大片免费观看中文字幕| 亚洲国产精品乱码一区二区| 国产青草视频在线观看免费影院| ww亚洲ww在线观看国产| 99在线精品免费视频九九视| 亚洲熟妇无码另类久久久| fc2成年免费共享视频网站| 午夜寂寞在线一级观看免费| 国产亚洲福利在线视频| 成人毛片免费播放| 亚洲av无码专区在线观看下载| 国产精品高清全国免费观看| 一个人看的免费高清视频日本| 久久夜色精品国产亚洲| 5555在线播放免费播放| 久久国产亚洲精品麻豆| 久久这里只精品热免费99| 亚洲综合av永久无码精品一区二区| 91免费国产视频| 久久狠狠高潮亚洲精品| a成人毛片免费观看| 亚洲情a成黄在线观看动漫尤物| 亚洲黄色免费观看| 亚洲精品动漫免费二区| 国产亚洲精品资在线| 曰批全过程免费视频免费看| 国产精品亚洲片在线| 亚洲三级高清免费| 亚洲av乱码一区二区三区| 日韩免费a级在线观看| 亚洲欧美日韩久久精品| 国产成人精品久久亚洲| 最近中文字幕国语免费完整 | 一本岛高清v不卡免费一三区| 亚洲爆乳无码精品AAA片蜜桃| 91麻豆国产自产在线观看亚洲 | 亚洲高清免费在线观看| 亚洲精华国产精华精华液| 久久精品国产亚洲精品| 114一级毛片免费|